构建MySql查询

时间:2014-03-14 08:16:33

标签: mysql

我有一个名为private_message的数据库表。我在其上运行以下查询以获取一个用户(47762)向其发送私人消息的所有用户ID的结果:

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 个答案:

答案 0 :(得分:1)

您应该使用IN而不是=,因为您无法将(=)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

在大多数情况下会更有效率。