支持的 DBMSNATURAL JOIN
要求连接键的列名匹配,如果这样做,SELECT *
您将只获得唯一的列名。尝试指定列名是没有意义的,因为整个事情都是通过已经相同的名称来工作的。
您必须在两个表之间有同名列,因为它将使用它们之间的每个同名列来执行连接。TableA
您的表TableB
不适合自然连接,因为它们不共享任何列名。
所以你被降级为定期加入:
SELECT
A.*, -- you can at least get all the columns from one table
B.Column4 -- but you have to specify the rest one at a time
FROM
TableA A
INNER JOIN TableB B
ON A.Column1 = B.Column3
;
你只需要硬着头皮写下查询。您可能不想写列名,但这是不可能的。
一些注意事项:当您说“返回一个新表”时,我想我知道您的意思,但从技术上讲,它是一个行集,因为要成为一个表,它必须以名称存储在数据库中。
可以为视图或内联派生表中的列设置别名,但您没有告诉我们您使用的是什么特定的 DBMS,因此我们可以回答它的确切功能。它可能看起来像这样:
SELECT
*
FROM
TableA A
NATURAL JOIN (
SELECT Column1 = Column3, Column4
FROM TableB B
) B
;
但请注意,您仍然必须列出所有其他列TableB
才能执行此操作。而且我什至不确定它是否有效。