(如果这个问题的标题有误,请有人修理..)
我有三张这样的表
(Output table that I want)
+--------+-------+
|NAME |CLASS |
+--------+-------+
|Batman |swim |
+--------+-------+
|Superman|math |
+--------+-------+
问题是:如何选择那个蝙蝠侠没有参加游泳课,超人没有参加数学课?
像这样:
file:///my-path
答案 0 :(得分:2)
您需要先CROSS JOIN
SUPERHERO
和CLASS
表格才能获得SUPERHERO & CLASS
的所有可能组合。
稍后在上面的交叉连接表t
和SCHOOL
表之间进行左连接。
最后通过检查相应的WHERE
条目SCHOOL
来过滤NULL
子句中的结果,确保这些组合(superhero
,class
)不会过去; t实际存在于SCHOOL
表
SELECT
t.NAME,
t.CLASS
FROM
(
SELECT
SH.NAME,
C.CLASS
FROM SUPERHERO SH
CROSS JOIN CLASS C
) AS t
LEFT JOIN SCHOOL S ON t.NAME = S.NAME AND t.CLASS = S.CLASS
WHERE S.NO IS NULL