2010-06-15 64 views
2

我使用MySQL數據庫,我想更新基於另一個表中的字段。類似於:更新字段感謝基於另一個字段的子查詢

UPDATE table1 
SET field1 = table2.id 
WHERE field2 IN (
    SELECT table2.name 
    FROM table2 
    ); 

我知道這個查詢不起作用,但這裏有個想法。這甚至有可能做到嗎?

回答

3

您可以使用如下的相關子查詢。這假定將會有一個匹配的值返回。如果返回多個匹配值,則會引發錯誤,如果返回零,則將該字段設置爲null。如果最後一種行爲不可取,則需要where條款。

UPDATE table1 
SET field1 = (SELECT DISTINCT table2.ValueColumn 
       FROM table2 
       WHERE table2.JoinColumn = table1.JoinColumn) 

編輯

審查記錄爲0或超過10場比賽,你可以使用

SELECT table1.JoinColumn, COUNT(DISTINCT table2.ValueColumn) 
FROM table1 
LEFT JOIN table2 
ON table2.JoinColumn = table1.JoinColumn 
GROUP BY table1.JoinColumn 
HAVING COUNT(DISTINCT table2.ValueColumn) <> 1 
+0

呀你說得對,謝謝。我沒有想到這種可能性。 – Nicolas 2010-06-15 11:03:52

+0

@Nicolas這可能也有一個JOIN語法。有在SQL Server中,但我不知道這是相同的在MySQL – 2010-06-15 11:05:35

+0

@Martin我目前正在測試它,我無法擺脫這個錯誤:'子查詢返回多於1行,儘管嘗試添加DISTINCT子查詢。 – Nicolas 2010-06-15 11:09:00

相關問題