假设我们有两张桌子:
t1: (c1a, c3, c4, c5 ... c1000)t2: (c1b, c2)我希望基于匹配的c2 /c1b值将c1a添加到t1中。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。这似乎很麻烦;我觉得这应该在一句话中做到。是否有类似于select all columns except for x, y from ...的SQL表达式?
发布于 2019-10-23 18:22:45
如果唯一重复的列来自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子句的数据库。但这种情况并不常见。
https://stackoverflow.com/questions/58528851
复制相似问题