我想像这样做一个正确的联接:
我希望所有B都没有任何A.
要么
所有B只有A.type<> 0(如果他们有一个A.type = 0我不想要他们)
现在我有这个:
SELECT B.*
FROM A
RIGHT JOIN B ON A.ticket = B.id
WHERE A.id IS NULL
AND B.state NOT IN (3,4,10)
AND B.disable = 0
最佳答案 没有理由使用RIGHT JOIN.对于大多数人来说,由于两个原因,它比LEFT JOIN更容易混淆.首先,FROM子句读作“从左到右”. LEFT JOIN保留子句中第一个表中的所有行.在尚未见到的最后一张桌子中的正确加入.其次,FROM子句从左到右解析,这在组合多个外连接时引入了一些微妙的问题.
接下来,你明确说:
i want to exclude B who doesn’t have a A.Type = 0
这相当于:
i want to include B who have no A.Type = 0
这不是一个外部联接.我认为这更接近你想要的:
在你的情况下:
SELECT B.*
FROM B
WHERE NOT EXISTS (SELECT 1
FROM A
WHERE A.ticket = B.id AND A.Type = 0
) AND
B.state NOT IN (3, 4, 10) AND B.disable = 0;