我有两张桌子(主人,回应)
我需要使用Responses表中的Master_Id字段,在Master表(id)中查找匹配记录,并使用Responses表中的日期字段更新Master表中的日期字段
主表的Id字段链接到Reponses表的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错误 - 单行选择中的多行。
我是否需要添加联接或更改内容?
答案 0 :(得分: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 :(得分:1)
您可以尝试FIRST
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)