2014-03-14 73 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',只要你沒有真正的理由使用子查詢。 –