0

当我加入 2 个表时,出现错误

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

#1242 - 子查询返回多于 1 行

加入这两个大型数据表的最佳方法是什么?我想要所有的结果

4

4 回答 4

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
于 2012-05-14T13:56:55.340 回答
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
于 2012-05-14T13:58:15.187 回答
2

尝试使用 'IN' 而不是 '='

select * from picture where id IN (SELECT id FROM user where age= 40 )  
于 2012-05-14T13:57:33.247 回答
2

从我所看到的猜测中,

您有一个“图片”表和一个“用户”表。

  1. 表名应该是复数。使其成为“图片”和“用户”。
  2. 首先定义你的关系。在您的情况下,一个用户有_许多图片,而一张图片属于_一个用户。(一张图片[在一个和平的世界上]不会属于许多用户)。
  3. 在您的图片表中,有一个“user_id”列并使用适当的 user_ids 填充该列。
  4. 现在,

您想要所有年龄正好是 40 岁的用户的照片。

你可以做一个,

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

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

于 2012-05-14T14:15:07.220 回答