左连接而不存在

时间:2014-03-06 21:17:42

标签: mysql sql

我有一个场景,其中我有5个不同列的表。

如果我加入Table1table2,我会收到结果A并加入table3table4table5我会得到结果{{1 }}

我需要将结果B与结果A进行比较,并显示结果B 不在结果A

我试过了:

B

但这并没有给我预期的结果。我尝试使用不存在而且我不能做不存在。

我可以为此获得任何帮助。

  

我尝试了以下修改建议的查询,但我仍然无法满足我的要求

 SELECT X* 
    FROM 
    (SELECT .. 
     FROM table1
      JOIN TABLE 2)X
  LEFT JOIN 
     (SELECT ...
          FROM TABLE 3
           JOIN 4 
           JOIN 5) Y ON x.=y.
 WHERE x.Z=''

根据我的要求,我只需要显示Y中不存在的那些结果。

但上面的当前查询的工作原理如下,  显示来自X的所有结果,即使Y中有0个结果。

我不确定我哪里出错了。

1 个答案:

答案 0 :(得分:4)

从A中排除B的一般方法是

SELECT * FROM A LEFT JOIN B on A.ID = B.ID WHERE B.ID IS NULL

在你的情况下,它应该是

select x* 
    from 
    (select .. 
     from table1
      join table 2)X
  left join 
     (select ...
          from table 3
           join 4 
           join 5) y on x.COLUMN=y.COLUMN
 where x.Z='' and y.COLUMN IS NULL

更新: 如果某些条件为真,则一般方法从A获取所有行:

SELECT * FROM A WHERE your_condition

在你的情况下,它应该是

select x* 
    from 
    (select .. 
     from table1
      join table 2)X
  left join 
     (select ...
          from table 3
           join 4 
           join 5) y on x.COLUMN=y.COLUMN
 where x.Z='' and y.COLUMN IS NULL
and (select count(*) from Y) > 0