2014-03-14 69 views
0

我有一个名为private_message的数据库表。我在它上面运行下面的查询来获取所有用户ID的结果是一个用户(47762)发悄悄话给:构建MySql查询

SELECT `to_id` FROM `private_message` WHERE `from_id` = 47762 

我现在想用这个查询或另一台其他方式称为users得到所有谁从47762.

收到的电子邮件地址的用户的电子邮件地址,我尝试了以下内容:

SELECT * FROM `users` WHERE `sid` = (SELECT `to_id` FROM `private_message` WHERE `from_id` = 47762) 

在上面的查询,users.sid相同private_messages.to_id

我得到了错误#1242 - 子查询返回多于1行。

我想要的是从用户47762发送私人消息但用户表的用户的电子邮件地址。

我是MYSQL的新手,所以会在这里感谢一些帮助。

谢谢。

+1

使用'IN',卢克。 – zerkms

+0

感谢卢克,它工作。 – manizzi

回答

1

您应该使用IN而不是=,因为您无法将sid(=)sid与多个值进行比较。

SELECT * FROM `users` WHERE `sid` IN (SELECT `to_id` FROM `private_message` WHERE `from_id` = 47762) 

反正你可以做一个JOIN这里来代替:

SELECT u.* FROM `users` AS u 
JOIN `private_message` AS pm ON u.`sid` = pm.`to_id` 
WHERE pm.`from_id` = 47762 

这将是在大多数情况下更有效。

+0

您的第一份陈述完美地完成了这项工作。 – manizzi

+1

这两个陈述应该工作。去连接。 –

+0

我建议你尽可能使用'JOIN',只要你没有真正的理由使用子查询。 –