2013-03-12 108 views
-1

都行,但我有一個表像這樣更新使用SQL查詢

+-------------------------------------+ 
| Description | ID | Show(1 or 0) | 
+-------------------------------------+ 

我有同樣的描述一堆條目,但一個具有空的ID。我必須在沒有null的所有行上設置顯示爲0,但只有當它們具有多於相同描述的行2時才顯示。我是SQL新手,我有大約5萬行,所以我寧願不手動。

USA 987655 1 - 更改爲0

USA 987658 1 - 更改爲0

USA 987617 1 - 更改爲0

美國989876空 - 不變

CAN 767655 1 - 沒有改變

CAN 957655 1 - 沒有改變

曾嘗試:

UPDATE test1 t1, 
    (
    SELECT id, description, show AS mid 
    FROM test1 ti 
    GROUP BY 
      description 
    ) tm 
SET  show = 0 
WHERE t1.description= tm.description 
    AND id is not null; 

預先感謝您

+2

[什麼都有你嘗試過?](http://www.whathaveyoutried.com/)請參閱[請教](http://stackoverflow.com/questions/ask-advice)。 – 2013-03-12 00:39:28

+0

從左表中選擇ID連接相同的表,其中某些東西匹配其他東西,而某些東西是空的......已經回答了很多次。 – Popnoodles 2013-03-12 00:41:08

+0

例如在上面的記錄的最後部分有這行'EUR 666661 0',我需要將它更改爲1嗎?還是沒有,因爲它只有一個「歐元」? – 2013-03-12 00:46:25

回答

1

你需要一個相關子查詢。我沒有測試過,請謹慎使用。但是這樣的事情可能就是你所追求的。

UPDATE 
    some_table st1 
    JOIN (
    SELECT st2.description, count(*) c 
    FROM some_table st2 
    WHERE 
     st1.description = st1.description AND 
     st1.id IS NOT NULL AND 
     st2.id IS NOT NULL 
    GROUP by st2.description 
    HAVING c > 1 
) AS tmp ON tmp.description = st1.description 
SET st1.show = 0 
+0

謝謝!這正是我需要得到的。 – Robin 2013-03-12 04:06:50

0

這不是最終的答案,但可以幫助你很多(我猜)

執行這個查詢,看看哪些應該從0更新爲1

SELECT description, COUNT(*) as "Same Description" FROM table 
WHERE id <> null 
GROUP BY description 
HAVING COUNT(*) > 2