2012-05-30 19 views
0

我有三個表,並且需要獲取消息,其中用戶PETER不是發件人,也不是收件人。MySql:需要SQL來通過一些規則選擇消息

表 '消息'

idMessage | bodyText   | idUserSender 
--------------------------------------------- 
1   | This is message 1 | 2 
2   | This is message 2 | 1 
3   | This is message 3 | 1 

表 '用戶'

idUser  | name 
------------------- 
1   | John 
2   | Peter 
3   | Marco 

表 'messageRecipients'

idMessage | idUserRecipient 
---------------------------- 
1   | 1 
1   | 3 
2   | 1 
2   | 3 
3   | 2 
3   | 3 

所以結果集應該是:

idMessage | bodyText   | idUserSender 
--------------------------------------------- 
2   | This is message 2 | 1 

我試着用:

SELECT * FROM messages AS M 
LEFT JOIN 
(
    SELECT * FROM users WHERE idUser <> 2 
) AS allUsersWithoutPeter ON M.idUserSender = allUsersWithoutPeter.idUser 
GROUP BY M.idMessage 

,並得到消息彼得不是發件人,但不知道如何除外消息彼得是接受者得並只獲得其中不包括反正彼得消息。

回答

0
SELECT m.* FROM Messages m 
JOIN messageRecipients r ON 
r.idMessage = m.idMessage 
    AND r.idUserRecipient <> 2 
WHERE m.idUserSender <> 2 

你當然可以參數化此查詢以排除任何idUser

0
select 
    m.* 
from 
    messages m 
join 
    users u on u.idUser != m.idUserSender and u.name='Peter' 
join 
    messageRecipients mr on mr.idMessage = m.idMessage and mr.idUserRecipient != u.idUser