sql查询 - 在两个表上选择,这两个表使用来自两个表的数据来过滤结果

时间:2016-02-11 10:37:32

标签: mysql sql-server

我有两个包含以下列的表:

tbl_a: id, date, data
tbl_b: id, date, a_id, data

在tbl_b.a_id中保存了tbl_a相关记录whitout外键定义的id。

我不会从tbl_a中选择所有id,其中tbl_b中有0条记录 tbl_b.a_id = tbl_a.id AND tbl_b.date = tbl_a.date。

2 个答案:

答案 0 :(得分:1)

这是您正在寻找的简单的NOT EXISTS子句(来自tbl_a的记录不存在 tbl_b中的条目):

select id
from tbl_a a
where not exists
(
  select *
  from tbl_b b
  where b.a_id = a.id
  and b.date = a.date
);

UPDATE:这与NOT IN子句相同,后者更容易阅读。但是,只有当tbl_b.a_idtbl_b.date都不可为空时,这才有效。

select id
from tbl_a
where (id, date) not in (select a_id, date from tbl_b); 

答案 1 :(得分:0)

您可以尝试以下查询:

SELECT 
tbl_a.id
FROM
tbl_a LEFT JOIN tbl_b ON tbl_b.a_id = tbl_a.id AND tbl_a.date = tbl_b.date
WHERE tbl_b.a_id IS NULL

注意: 你需要收集一些关于MySQL连接的知识,特别是左连接才能理解上面的查询。 您可以查看此article

N:B:如果您不想采用LEFT JOIN,那么您可以查看其他答案。

SQL FIDDLE