组合2个表 - 子查询返回多于1行

时间:2012-05-14 13:54:55

标签: mysql sql join phpmyadmin

当我加入2个表时,我收到错误

select * from picture where id=(SELECT id FROM user where age= 40 ) 
  

#1242 - 子查询返回超过1行

加入这两个大数据表的最佳方法是什么?我希望得到所有结果

4 个答案:

答案 0 :(得分:5)

=替换为IN

select * from picture where id in (select id from user where age = 40) 

请注意,这只是“半连接”两个表格,即您只能将图片作为结果,而不是图片用户关系。如果你真的想要做后者,那么你必须inner join这两个表:

select * from picture p
join user u on p.id = u.id -- are you sure about this join condition?
where u.age = 40

答案 1 :(得分:3)

在where子句中,当您为id赋值时,SQL需要一个值。问题是第二个查询SELECT id FROM user where age= 40返回多行。

你能做的是

select * 
from picture 
where id in
    (select id from user where age = 40) 

select *
from picture p, user u
where p.id = u.id
and u.age = 40

答案 2 :(得分:2)

尝试使用'IN'代替'='

select * from picture where id IN (SELECT id FROM user where age= 40 )  

答案 3 :(得分:2)

从我猜测的内容中看出来,

你有一张“图片”表和一张“用户”表。

  1. 表名应为复数。使它成为“图片”和“用户”。
  2. 首先定义您的关系。在你的情况下,一个用户拥有多张图片,一张图片属于一个用户。(一张图片[关于一个和平的世界]不属于许多用户)。
  3. 在图片表格中,有一个“user_id”列,并使用相应的user_ids填充该列。
  4. 现在,
  5. 您想要年龄正好为40岁的用户的所有照片。

    你可以做一个,

    SELECT *   
    FROM pictures 
    WHERE user_id IN (SELECT user_id 
                      FROM users 
                      WHERE user_age = 40)
    

    那是你的要求吗?我有意义吗?