SQL数据库:#1242 - 子查询返回超过1行

时间:2016-06-24 11:10:31

标签: mysql

UPDATE table1 AS t1 
       INNER JOIN table2 AS t2 ON t1.table1_id=t2.table2_id 
   SET t1.overview=t2.val 
 WHERE t1.table1_id=(SELECT table2_id
                       FROM table2
                      WHERE table2_id=1);

table2有多个id值为1,因此它给出了

#1242 - Subquery returns more than 1 row

3 个答案:

答案 0 :(得分:0)

您需要DISTINCT

UPDATE table1 AS t1
INNER JOIN table2 AS t2
ON t1.table1_id = t2.table2_id
SET t1.overview = t2.val
WHERE t1.table1_id = (SELECT DISTINCT table2_id FROM table2 WHERE table2_id = 1);

如果table2_id已修复,为什么不要像以下那样使用1:

UPDATE table1 AS t1
INNER JOIN table2 AS t2
ON t1.table1_id = t2.table2_id
SET t1.overview = t2.val
WHERE t1.table1_id = 1;

答案 1 :(得分:0)

如果您确实想将t1.table1_id与多个值进行比较,请使用:

中的

而不是 =

UPDATE table1 AS t1 
INNER JOIN table2 AS t2 ON t1.table1_id=t2.table2_id 
SET t1.overview=t2.val WHERE t1.table1_id  
IN ( SELECT xxx FROM table2 WHERE table2_id=1);

顺便说一句,如果您只是从内部查询返回 table2_id ,则可以完全跳过内部查询。

答案 2 :(得分:0)

显然,table2中有超过1条记录具有相同的ID。
但是,如果确定,请将=运营商更改为in运营商。
所以这将是你的代码:

UPDATE table1 AS t1 INNER JOIN table2 AS t2 ON t1.table1_id=t2.table2_id SET t1.overview=t2.val where t1.table1_id in ( SELECT table2_id
    FROM table2 WHERE table2_id=1);

修改 不需要子查询,这是多余的。看看这个:

UPDATE table1 AS t1 INNER JOIN table2 AS t2 ON t1.table1_id=t2.table2_id SET t1.overview=t2.val where table2_id=1;