たとえば、ボールとボックスがある場合、ボールは多くのボックスにあり、ボックスはロックできます。ロックされたボックスにないボールはどのように選択できますか?私はこの使用して左を作ってみた列値の結合レコードを除外しますか?
balls
id name
== ====
1 in neither
2 in unlocked
3 in locked
4 in both
boxes
id locked
== ======
1 0
2 1
boxings
ball_id box_id
======= ======
2 1
3 2
4 1
4 2
が参加し、それは私が除外するボール 「の両方に」を返します。
SELECT balls.*
FROM balls
LEFT OUTER JOIN boxings ON boxings.ball_id = balls.id
LEFT OUTER JOIN boxes ON boxes.id = boxings.box_id
WHERE (boxings.box_id IS NULL or boxes.locked = 0)
AND boxes.id NOT IN (
SELECT id FROM boxes WHERE locked = 1
)
望ましい結果:
id name
== ====
1 in neither
2 in unlocked
SQLフィドル: http://sqlfiddle.com/#!9/c26ab/4
それだ、ありがとう:とにかく
は、ここで抗参加アプローチの異なるバリエーションです! – jemminger