我有两张桌子:
Table1 has columns A, B, C, D, E, F, G
Table2 has columns G, H, I, J, K, L, M, N
我想在G列上加入这两个表,但要避免重复列(模糊G)。 我必须像下面那样进行查询。
select
t1.*,
t2.H,
t2.I,
t2.J,
t2.K,
t2.L,
t2.M,
t2.N
from Table1 t1
inner join Table2 t2
on t1.G = t2.G
我已经使用t1。*来尝试避免在table1中键入每个列名称但是,我仍然必须输入加入列G的所有列EXCEPT,如果你有一个包含很多列的表,这是一个彻底的灾难列...
我们可以做一些方便的方式
select
t1.*
t2.*(except G)
....
非常感谢!
我知道我可以打印出所有列名,然后复制并粘贴,但是,即使我不需要手动输入,查询仍然太长而无法调试....
答案 0 :(得分:4)
通常强烈建议在除临时查询之外的任何事情中使用SELECT * FROM
进行测试。
原因是表模式发生了变化,这可能会破坏假定存在某个列的代码或表中列的顺序。
即使它使您的查询时间很长,我也建议您在数据集中指定要返回的每一列。
但是,要回答你的问题,没有办法在SELECT子句中指定除之外的每一列。
答案 1 :(得分:2)
您可以使用natural join:
自然连接是一种等连接,其中出现连接谓词 隐式地通过比较两个表中具有相同列的所有列 连接表中的列名。生成的连接表包含 每对同名列只有一列。
SELECT * FROM T1 NATURAL JOIN T2;
请结帐this demo。
但请注意,NATURAL JOIN
是危险的,因此强烈反对使用它们。危险来自于无意中添加了一个新列,其名称与另一个表中的另一列相同。
答案 2 :(得分:1)
您无法自动执行此操作(使用动态SQL除外)。但是你可以通过查询信息表来节省很多精力。
您可以通过执行以下操作获取两个表中的列列表:
select distinct column_name
from information_schema.columns
where table_name in ('Table1', 'Table2') and
table_schema = <schema name>;
您可以将此列表复制到SQL编辑器(或Excel)中以格式化查询。为了方便起见,您甚至可以这样做:
select group_concat(distinct concat(column_name, ', '))
from information_schema.columns
where table_name in ('Table1', 'Table2') and
table_schema = <schema name>;
这会将所有列放在一行上,以列分隔。