2011-02-10 70 views
0

我有兩個表(碩士,迴應)幫助更新SQL

我需要使用Master_Id字段從響應表,來看看它在主表(ID)匹配記錄,並在更新日期字段與在響應表

主表的ID字段鏈接反應變量表的Master_id場

日期字段的主表格可在SQL中做????

UPDATE Master m SET m.date = (
    SELECT r.date FROM Reponses r WHERE r.master_id = m.id) 
WHERE m.id IN (SELECT master_id FROM Responses) 

我得到一個 - 一般SQL錯誤 - 在單身人士選擇多行。

我是否需要添加連接或更改某些內容?

回答

3

的錯誤意味着有一些情況下,一個特定的主記錄有一個以上的響應,子查詢來獲得日期返回不止一行。正如你可能知道的那樣,服務器沒有邏輯來選擇正確的響應並更新主表(日期可能不同或者不知道),因此顯示錯誤消息。

你需要做的是確保子查詢只返回一行:確切的一行你需要選擇主表上的響應日期。如果所有響應行都包含相同的日期,您可以使用FIRST子句返回第一行,如@cyberkiwi所示。

但是你可能想選擇最新的,最古老的或任何其他基於一個標準:

這一切都將取消錯誤信息,正確的可能不會,播種根據您的需要:

UPDATE Master m SET m.date = (
    SELECT FIRST 1 r.date FROM Reponses r WHERE r.master_id = m.id) 
WHERE m.id IN (SELECT master_id FROM Responses) 

UPDATE Master m SET m.date = (
    SELECT MAX(r.date) FROM Reponses r WHERE r.master_id = m.id) 
WHERE m.id IN (SELECT master_id FROM Responses) 

UPDATE Master m SET m.date = (
    SELECT MIN(r.date) FROM Reponses r WHERE r.master_id = m.id) 
WHERE m.id IN (SELECT master_id FROM Responses) 

UPDATE Master m SET m.date = (
    SELECT r.date FROM Reponses r WHERE r.master_id = m.id AND r.accepted = 1) 
WHERE m.id IN (SELECT master_id FROM Responses) 
1

你可以先試

UPDATE Master m SET m.date = (
    SELECT FIRST 1 r.date FROM Responses r WHERE r.master_id = m.id) 
WHERE m.id IN (SELECT master_id FROM Responses) 
+0

FIRST?不知道這是如何幫助我更新在主表中使用日期字段在ID匹配的響應表中的所有日期記錄????????? – IElite 2011-02-10 14:30:50