假设我们有两个表:
t1: (c1a, c3, c4, c5 ... c1000)
t2: (c1b, c2)
我想基于匹配的c2
/ t1
值向c1a
添加c1b
。 c1a
和c1b
具有相同的值,为避免歧义,我只是将它们命名为不同的值。我加入了:
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 ...
?
答案 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
子句的数据库。但这不是很常见。