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

Mysql 组合2个表-子查询返回多于1行,mysql,sql,join,phpmyadmin,Mysql,Sql,Join,Phpmyadmin,当我加入两个表时,我得到了一个错误 select * from picture where id=(SELECT id FROM user where age= 40 ) 1242-子查询返回超过1行 连接这两个大数据表的最佳方式是什么?我想将所有结果替换为 注意,这只是两个表的半连接,即,您将只获得作为结果的图片,而不是图片用户关系。如果您确实要执行后一种操作,则必须将两个表进行内部联接: select * from picture p join user u on p.id = u.id

当我加入两个表时,我得到了一个错误

select * from picture where id=(SELECT id FROM user where age= 40 ) 
1242-子查询返回超过1行

连接这两个大数据表的最佳方式是什么?我想将所有结果替换为

注意,这只是两个表的半连接,即,您将只获得作为结果的图片,而不是图片用户关系。如果您确实要执行后一种操作,则必须将两个表进行内部联接:

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

尝试使用“IN”而不是“=”

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

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

你能做的就是

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

从我所看到的猜测中

您有一个图片表和一个用户表

表名应该是复数。让它成为图片和用户。 首先定义你的关系。在你的例子中,一个用户有多张图片,一张图片属于一个用户。一张图片[在和平的世界上]不会属于多个用户。 在图片表中,有一个用户id列,并用适当的用户id填充该列。 现在 您需要年龄正好为40岁的用户的所有照片

你可以做一个

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

这是你的要求吗?。我说得通吗?

您没有加入两个表,而是从一个表中进行选择,并根据另一个表的结果对结果集进行限定。在本例中,用户表中有两个ID,年龄为40岁。请告诉我你到底想要什么?@beck03076:也就是说,OP是半加入表格…@LukasEder:是的,Lukas,半加入不是加入,是吗?。无论如何,谢谢你的更正。我不明白他的设计。他正在比较图片id和用户id,你注意到了吗?@beck03076:我不知道OP在说加入时理解什么。也许他说的是半加入。。。我注意到了奇怪的连接谓词。我在回答中也提到过。@卢卡塞德:我刚刚看到你的回答,酷!让我也写一个答案,毕竟我们就是这么做的!加入是正确的方法!是的,但是我们没有创建连接查询IMO的所有信息。上面的连接示例似乎比较了图片id和个人id,正如Lukas所说:这就是创建连接所需的信息。
select *
from picture p, user u
where p.id = u.id
and u.age = 40
SELECT *   
FROM pictures 
WHERE user_id IN (SELECT user_id 
                  FROM users 
                  WHERE user_age = 40)