问题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 ...您拥有的查询更具可扩展性。 –