首页 > 解决方案 > SQL除了选择两个表中的列数不同

问题描述

我有两个 SQL 表,它们都有三列

普通的

val_one, val_two, bool_val
1, 2, False
3, 4, False

温度

val_one, val_two, bool_val
1, 2, True

我有一个 SQL 语句,可以从另一个表中不存在的行中选择所有行。

"SELECT val_one, val_two, bool_val FROM temp EXCEPT SELECT val_one, val_two, bool_val FROM normal;"

但是,这有一个问题,它还返回具有不同布尔值的行,这不是我想要的。因此,如果我查询,我只想取回具有不同 (val_one, val_two) 值的行

在此示例中,我的查询理想情况下只返回

3, 4, False

我怎样才能修改当前的语句来做到这一点?

标签: sqlpostgresql

解决方案


使用不存在如下

SELECT val_one, val_two, bool_val FROM normal n
where not exists 
     (
          SELECT 1 FROM temp t  where t.val_one=n.val_one and t.val_two=n.val_two
      )

DB-小提琴

 create table normal(val_one int, val_two int, bool_val varchar(10));
 insert into normal values(1, 2, False);
 insert into normal values(3, 4, False);

 create table temp(val_one int, val_two int, bool_val varchar(10));
 insert into temp values(1, 2, True);

询问:

 SELECT val_one, val_two, bool_val FROM normal n
 where not exists 
      (
           SELECT 1 FROM temp t  where t.val_one=n.val_one and t.val_two=n.val_two
       )

输出:

val_one val_two 布尔值
3 4 错误的

db<小提琴在这里


推荐阅读