sql – 没有交集和另一个条件的右连接

我想像这样做一个正确的联接:

《sql – 没有交集和另一个条件的右连接》

我希望所有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;
点赞