次のようなデータベース スキーマがあります。
users
USERNAME (PK), SEX
Alex, F
John, M
Troy, M
Matt, M
messages
ID (PK), CREATOR (FK users), DATE_CREATED
1, John, 2012-04-15
2, Troy, 2012-04-16
message_recipients
ID, MESSAGE_ID (FK messages), RECIPIENT (FK users), DATE
1, 1, John, 2012-04-15
2, 1, Troy, 2012-04-15
3, 1, Matt, 2012-04-15
4, 2, Alex, 2012-04-16
4, 2, John, 2012-04-16
課題はこれです。John、Troy、Matt のみを受信者とするメッセージ ID を取得したいと考えています。
これは私のクエリです:
SELECT mr1.MESSAGE_ID
FROM message_recipients mr1, message_recipients mr2
WHERE mr1.MESSAGE_ID = mr2.MESSAGE_ID
AND mr1.RECIPIENT = mr2.RECIPIENT
AND mr2.RECIPIENT = 'John'
AND mr2.RECIPIENT = 'Troy'
AND mr2.RECIPIENT = 'Matt'
上記の SQL は結果なしを示しています。
このクエリを実行すると:
SELECT mr1.MESSAGE_ID
FROM message_recipients mr1, message_recipients mr2
WHERE mr1.MESSAGE_ID = mr2.MESSAGE_ID
AND mr1.RECIPIENT_ID = mr2.RECIPIENT_ID
AND (mr2.RECIPIENT_ID = 'John'
OR mr2.RECIPIENT_ID = 'Troy'
OR mr2.RECIPIENT_ID = 'Matt')
GROUP BY mr1.MESSAGE_ID
結果:
MESSAGE_ID
1
2
私が見たいのは結果として1つ(MESSAGE_ID)だけなので、上記の結果は正しくありません。
私は何を間違えましたか?誰かが私を啓発できますか?
どうもありがとう、ジョン