問題1:有沒有辦法選擇我需要什麼沒有 'HAVING 個性化......' 的一部分?
是的,你可以使用多個連接的,但不是需要一個連接,每mp.participant_id一個非常好的solution.because ......你的查詢是更可擴展
查詢
SELECT
m.meeting_id
, m.name
, m.status
FROM
meetings AS m
INNER JOIN meetings_participants AS mp1 ON m.meeting_id = mp1.meeting_id AND m.status <> 'temporary' AND mp1.participant_id = 1
INNER JOIN meetings_participants AS mp2 ON m.meeting_id = mp2.meeting_id AND m.status <> 'temporary' AND mp2.participant_id = 2
結果
| meeting_id | name | status |
|------------|-----------|-----------|
| 1 | a meeting | active |
| 5 | e meeting | cancelled |
演示http://sqlfiddle.com/#!9/8a331d/54
問題2:在第二個查詢,我需要確切 給定的參與者
會議你需要先找到COUNT爲每meeting_participants有兩個記錄
隨着
SELECT
meeting_id
FROM
meetings_participants
GROUP BY
meeting_id
HAVING COUNT(*) = 2
,並使用邁之內像這樣的查詢。
的查詢
SELECT
meetings.*
FROM (
SELECT
meeting_id
FROM
meetings_participants
WHERE
participant_id IN(1, 2)
AND
meeting_id IN(
SELECT
meeting_id
FROM
meetings_participants
GROUP BY
meeting_id
HAVING COUNT(*) = 2
)
GROUP BY
meeting_id
HAVING COUNT(*) = 2
)
meetings_participants
INNER JOIN
meetings
ON
meetings_participants.meeting_id = meetings.meeting_id
結果
| meeting_id | name | status |
|------------|-----------|-----------|
| 5 | e meeting | cancelled |
演示http://sqlfiddle.com/#!9/8a331d/46
「問題1:有沒有辦法選擇我需要什麼,而不的「具有個性化...... '部分?「是的,您可以使用多個JOIN,但這不是一個很好的解決方案。因爲您需要爲每個mp.participant_id加入JOIN ...您擁有的查詢更具可擴展性。 –