0

3 つのテーブルがあり、ユーザー PETER が送信者ではなく、受信者でもないメッセージを取得する必要があります。

テーブル「メッセージ」

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

テーブル「メッセージ受信者」

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

ピーターが送信者ではないメッセージを取得しましたが、ピーターが受信者でもあるメッセージを除外する方法がわかりません。とにかくピーターが含まれていないメッセージのみを取得します。

4

2 に答える 2

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

もちろん、このクエリをパラメータ化して除外することもできますidUser

于 2012-05-30T12:51:48.887 に答える
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
于 2012-05-30T12:52:38.077 に答える