右连接没有相交和其他条件

Phi*_*ane 5 sql join

我想这样进行正确的连接:

在此处输入图片说明

我希望所有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
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 4

没有理由使用RIGHT JOIN。对于大多数人来说,这比LEFT JOIN两个原因更令人困惑。首先,该FROM子句的读法是“从左到右”。ALEFT JOIN保留子句中第一个表中的所有行。RIGHT JOIN尚未见过的最后一个表中的。其次,该FROM子句是从左到右解析的,这在组合多个外连接时引入了一些微妙的问题。

接下来,你明确地说:

我想排除没有 A.Type = 0 的 B

这相当于:

我想包括没有 A.Type = 0 的 B

这不完全是外连接。我认为这更接近你想要的:

在你的情况下:

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;
Run Code Online (Sandbox Code Playgroud)