SQL - 显示表中没有来自另一个表的值的结果

时间:2016-02-21 19:58:30

标签: mysql sql join inner-join

我只需要显示表1和表2中的结果,但不在表3中。基本上,它应该类似于TABLE1,Table2,除了(TABLE1,Table2)和TABLE3之间的INNER JOIN。 Should looks like this - On left side Table1 and Table2, on right side Table3

现在我有了这个:

SELECT mesta_email, mesta_kod
            FROM Table1
            UNION ALL
            SELECT mesta_email, mesta_kod
            FROM Table2

// And somehow except values which are in Table3
是的,有人能帮帮我吗?非常感谢。

2 个答案:

答案 0 :(得分:1)

有几种不同的方法可以做到这一点。我相信使用mysql方法outer join/null做得更好:

select t.*
from (
      SELECT mesta_email, mesta_kod
      FROM Table1
      UNION ALL
      SELECT mesta_email, mesta_kod
      FROM Table2
) t left join Table3 t3 on t.mesta_email = t3.mesta_email
                       and t.mesta_kod = t3.mesta_kod
where t3.mesta_email is null

这假设table3与其他2个表共享相同的结构。

答案 1 :(得分:0)

我会在您使用existsnot exists撰写时几乎直接解决问题:

select t1.mesta_email, t2.mesta_kod
from table1 t1
where exists (select 1
              from table2 t2
              where t2.mesta_email = t1.mesta_email and t2.mesta_kod = t1.mesta_kod 
             ) and
       not exists (select 1
                   from table3 t3
                   where t3.mesta_email = t1.mesta_email and t3.mesta_kod = t1.mesta_kod 
                  );

exists / not exists优于其他方法的一个优点是重复。如果其中一个表(例如table1)没有重复,但其他表可能没有重复,则无需删除结果数据集中的重复项。