mysql-1主列表表不在表2中,而是在表3中

qybjjes1  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(318)

你能帮我问一下吗?
在我的数据库里,我有3个表,

Table 1 - Student Master List  (9 Records) 
Table 2 - AM  (4 Records)
Table 3 - PM  (3 Records)

表2和表3的结构相同,但表2的优先级高于表3
我想查看表1中的记录,这些记录不在表2中,但在表3中有一条记录。表2(4)+表3(3)=7条记录
但是我怎样才能显示主列表中的2条记录呢
示例数据库

我的问题是这样的:

select * from table1 t1 
where (id, lname, fname, mname) NOT IN
    (select id, lname, fname, mname from table2) and 
      (id, lname, fname, mname)  IN 
    (select id, lname, fname, mname from table3)

但当我这么做的时候,它只显示了表2和表3中的一些记录

nle07wnf

nle07wnf1#

我怀疑您只需要合并表2和表3,并留下连接表1的空值测试

drop table if exists t1,t2,t3;
create table t1 (id int);
create table t2 (id int);
create table t3 (id int);

insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9);
insert into t2 values (2),(3),(4),(5);
insert into t3 values (1),(6),(7);

select t1.* 
from t1 
left join
(select id from t2
union all 
select id from t3)s on s.id = t1.id
where s.id is null;

+------+
| id   |
+------+
|    8 |
|    9 |
+------+
2 rows in set (0.00 sec)
ni65a41a

ni65a41a2#

如果在所有表中有一个公共键 (id, lname, fname, mname) 下面就行了。如果您的常用键有所不同,请调整 WHERE 两个子查询中的子句只包含公共键(列)。
使用 EXISTS 包括表3中的记录和 NOT EXISTS 排除表2中的记录:

select *
from table1 t1
where 
  not exists (
    select 1
    from table2 t2
    where t1.id = t2.id and t1.lname = t2.lname and t1.fname = t2.fname and t1.mname = t2.mname)
  and exists (
    select 1
    from table3 t3
    where t1.id = t3.id and t1.lname = t3.lname and t1.fname = t3.fname and t1.mname = t3.mname)

相关问题