SQL连接消除重复列

SQL连接消除重复列,sql,postgresql,join,Sql,Postgresql,Join,所以我处理了几个表,它们都是由一个公共表生成的 它们的模式如下所示 T1:A、B、C、M、N T2:A,B,J,M T3:A、C、M、P 预期结果是所有表的联接版本丢弃重复值 R:T1.A、T1.B、T1.C、T2.J、T1.M、T1.N、T3.p 幸运的是,行的属性在同名列上重合,即 T1.A==T2.A==T3.A跨所有行 T1.B=T2.B跨所有行 等等 将这些表连接到一个R表中的查询是什么,只保留上面唯一命名的列 select T1.A, T1.B, T1.C, T2.J, T1.M,

所以我处理了几个表,它们都是由一个公共表生成的

它们的模式如下所示

T1:A、B、C、M、N
T2:A,B,J,M
T3:A、C、M、P

预期结果是所有表的联接版本丢弃重复值

R:T1.A、T1.B、T1.C、T2.J、T1.M、T1.N、T3.p

幸运的是,行的属性在同名列上重合,即

T1.A==T2.A==T3.A
跨所有行

T1.B=T2.B
跨所有行

等等

将这些表连接到一个
R
表中的查询是什么,只保留上面唯一命名的列

select T1.A, T1.B, T1.C, T2.J, T1.M, T1.N, T3.P
from t1 join t2 
on t1.A = t2.A and t1.B = t2.B and t1.M = t2.M
join t3 on
t1.A = t3.A and t1.C = t3.C and t1.M = t3.M

您必须
加入表中

基本查询是:

 SELECT T1.A, T1.B, T1.C, T2.J, T1.M, T1.N, T3.P
 FROM T1
 INNER JOIN T2 ON T1.A=T2.A and T1.B=T2.B and T1.M=T2.M
 INNER JOIN T3 ON T1.A=T3.A and T1.C=T3.C and T1.M=T3.M

在每个内部联接上设置的条件数应等于使其成为该表唯一行的所有列。例如,如果A、B和M足以使其唯一,则必须使用它们。索引覆盖范围(单独或完全聚集)应包含这些字段,使它们在一起是唯一的。

尽管其他解决方案是正确的,但更优雅的版本将是正确的

从T1中选择*
自然连接T2

自然联接T3

在联接表时只选择所需的列,如select t1.A、t2.j。。。。。。。(联接表)。只需在select语句中命名所需的列:
t1.A、t1.B、t1.c
,等等。为了好玩,请查看自然联接。@jarlh正是我要找的,
select*FROM t1 NATURAL join T2 NATURAL join T3