连接表t1和t2,仅保留t1的一列

时间:2019-10-23 18:18:42

标签: sql

假设我们有两个表:

  • t1: (c1a, c3, c4, c5 ... c1000)
  • t2: (c1b, c2)

我想基于匹配的c2 / t1值向c1a添加c1bc1ac1b具有相同的值,为避免歧义,我只是将它们命名为不同的值。我加入了:

select * from t1 left join t2 on t1.c1 = t2.c1 as t3

现在t3将拥有我需要的数据,但是看起来像这样:

t3: (c1a, c1b, c2, c3, c4, c5 ... c1000)

这是正确的,因为它具有我想要的所有列。但是,它有一个我不希望的额外列-因为最初做select *时,两个表中的所有列都包括在内。如果我不要多余的列怎么办?

  • 我可以手动指定所需的列:select c1a, c2, c3, c4, c5 ... c1000 from t1 left join ...问题很明显。
  • 我可以单独删除c1b。这似乎很老套;我觉得这应该是可行的。

是否存在一个SQL表达式,其含义类似于select all columns except for x, y from ...

1 个答案:

答案 0 :(得分:0)

如果唯一重复的列来自join,则using子句将有所帮助:

select *
from t1 left join
     t2 
     using (c1);

注意:并非所有数据库都支持using(尽管它是SQL标准)。

如果几乎​​所有列都来自其中一个表,则可以使用*来获得这些列,其余的可以显式地使用:

select t1.specialcol, t2.*
from t1 left join
     t2 
     on t1.c1 = t2.c1;

为此,确实存在具有except子句的数据库。但这不是很常见。