MySql联合使用多个右侧出现

时间:2018-03-13 18:03:46

标签: mysql left-join right-join

我有2张桌子(A和B)。表A上的每一行在表B上最多有3个对应关系。表B有一个状态字段,可以是" x" " Y"或" null"。

我想得到表A中的所有行,其中表B中没有匹配的行具有" X"状态(见下图)。所以基本上我想要Id 2和3的行。

enter image description here

请注意,我的声明必须在表A中。

到目前为止,我没有成功尝试以下内容:

select *
from table A
left join table B on a.Id = b.ref
where status = 'Y'
or status is null;

select *
from table A
right join table B on a.Id = b.ref
where status = 'Y'
or status is null;

问题是,对于表A中的每一行,我在表B中有一行满足where条件,因此我返回所有3行而不是只返回绿色的行。我需要做类似于"表B中所有匹配的行!=" X"

2 个答案:

答案 0 :(得分:2)

您的想法是尝试将表A中的行与表B上的任何人匹配,但只匹配其上有x的行。

如果你不能得到NULL,那就是你想要的行。

 SELECT A.*
 FROM TableA as A
 LEFT JOIN TableB as B
   ON A.id = B.Ref
  AND B.status = 'x'
 WHERE B.status is null

答案 1 :(得分:1)

Array.find()