JOIN列在两个表中具有相同名称时的T-SQL语法缩写?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JOIN列在两个表中具有相同名称时的T-SQL语法缩写?相关的知识,希望对你有一定的参考价值。

在T-SQL中,当两个表中具有相同名称的两个列上发生这样的连接时,JOIN规范(ON …)是否可以简化为两个表之间的等连接?

CREATE TABLE T1 (X … PRIMARY KEY);
CREATE TABLE T2 (X … REFERENCES T1 (X));

通常我会编写如下(内部)连接,如下所示:

SELECT … FROM T1 JOIN T2 ON T1.X = T2.X;

我想要的是更简单的东西,例如:

SELECT … FROM T1 JOIN T2 ON X;

这种ON …规范的缩写是否可能以某种方式? (我希望答案是“不”,但我想确定。)

如果没有,有什么特别的原因可以吗? (例如,当连接两个以上的表时,它是否可能导致频繁的列模糊,因此几乎没有实际用途?)

答案

ANSI 92 SQL标准中有一个natural join

SELECT … FROM T1 NATURAL JOIN T2

但是,SQL Server不支持此功能。可能是一件好事,因为当你没有指定连接列显式时可能存在歧义。

没有像你提到的语法那样的缩写

    FROM T1 JOIN T2 ON X;
另一答案
  • 在SQL Server(T-SQL)中,没有这样的快捷方式。你必须输入所有JOIN列。
  • 在Oracle(P-SQL)中,NATURAL JOIN将匹配两个表中具有相同名称的列。
  • mysql中,USING在详细程度方面介于SQL Server和Oracle之间。你只需要在A JOIN B USING (col1, col2, col3)上写一下列名

NATURAL JOIN是ANSI SQL,但正如我们所知,没有一个主要的SQL供应商完全支持该标准。每个都有自己的添加和偏离标准。

以上是关于JOIN列在两个表中具有相同名称时的T-SQL语法缩写?的主要内容,如果未能解决你的问题,请参考以下文章

另一个表中的 SQL Server 列在视图中具有静态值

具有相同命名空间名称时的模拟库函数

使用 JOIN 时的 WHERE 子句与 ON

旧式 JOIN 语法在 T-SQL 中是啥意思?

MySQL:在没有 JOIN 或 UNION 的情况下合并两个不同的表

从名称具有相同首字母的表中选择