gpt4 book ai didi

postgresql - 在 postgresql 中查询

转载 作者:行者123 更新时间:2023-11-29 14:23:45 25 4
gpt4 key购买 nike

我有两个表 t1 和 t2 如下

t1

A    B    C    D   E
1 2 c d e
3 1 d e f
4 2 f g h

t2

A    B    
1 2
8 6
4 2

这里的 A,B,C,D,E 是 t1 的列,A,B 是 t2 的列,其中 A 和 B 是公共(public)列。
到目前为止我做了什么
我写了以下查询

WITH temp as (
select *
from t2
)
select tab1.*
from t1 tab1, temp tab2
where (tab1.A!=tab2.A OR tab1.B!=tab2.B)

想要这个输出

A    B    C    D    E
3 1 d e f

但我正在得到这个输出

A    B    C    D    E
1 2 c d e
1 2 c d e
3 1 d e f
3 1 d e f
3 1 d e f
4 2 f g h
4 2 f g h

我应该使用什么查询?

最佳答案

如果我没理解错的话,您会喜欢 T1 中那些在 T2 中没有相应行的行。在我看来,最简单的方法是 LEFT OUTER JOIN:

psql=> select * from t1;
a | b | c | d | e
---+---+---+---+---
1 | 2 | c | d | e
3 | 1 | d | e | f
4 | 2 | f | g | h
(3 rows)

psql=> select * from t2;
a | b
---+---
1 | 2
8 | 6
4 | 2
(3 rows)

psql=> select t1.a, t1.b, t1.c, t1.d, t1.e from t1 left outer join t2 on (t1.a = t2.a and t1.b = t2.b) where t2.a is null;
a | b | c | d | e
---+---+---+---+---
3 | 1 | d | e | f
(1 row)

编辑:这是没有 where 子句的选择,添加了来自 t2 的行(否则它就像 select * from t1)。如您所见,第一行包含 NULL 用于 t2_at2_b:

psql=> select t1.a, t1.b, t1.c, t1.d, t1.e, t2.a as t2_a, t2.b as t2_b from t1 left outer join t2 on (t1.a = t2.a and t1.b = t2.b);
a | b | c | d | e | t2_a | t2_b
---+---+---+---+---+------+------
3 | 1 | d | e | f | |
1 | 2 | c | d | e | 1 | 2
4 | 2 | f | g | h | 4 | 2
(3 rows)

关于postgresql - 在 postgresql 中查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11115006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com