我一直在看一本古老的大学SQL,偶然发现了一些我以前从未使用过并且不了解的语法。
SELECT * FROM TABLE1
LEFT JOIN TABLE 2 ON (TABLE1.COLUMN1 = TABLE1.COLUMN2), TABLE3 WHERE COLUMN1 LIKE '%%'
AND TABLE2.COLUMN1 = TABLE3.COLUMN1;
我对声明的这一部分表示满意,
SELECT * FROM TABLE1
LEFT JOIN TABLE 2 ON (TABLE1.COLUMN1 = TABLE1.COLUMN2)
但是在加入的第二部分中苦苦挣扎,
, TABLE3 WHERE COLUMN1 LIKE '%%'
AND TABLE2.COLUMN1 = TABLE3.COLUMN1;
有人能对这个外国概念大放异彩吗?
我最初的猜测是逗号是一种列出要联接的表的方法,而不是为要联接的每个表键入LEFT JOIN的方法,但是我现在不确定。
干杯。
逗号是一种老式join
语法,几十年来已经过时了(但得到了完全支持)。join
如今,几乎每个人都喜欢显式语法。
逗号在功能上等同于cross join
完整的笛卡尔积。因此查询与以下内容相同:
SELECT *
FROM TABLE1 LEFT JOIN
TABLE 2
ON TABLE1.COLUMN1 = TABLE1.COLUMN2 CROSS JOIN
TABLE3
WHERE COLUMN1 LIKE '%%' AND TABLE2.COLUMN1 = TABLE3.COLUMN1;
我不会写这样的查询。首先,COLUMN1 LIKE '%%'
将产生一个错误,因为TABLE1
并且TABLE3
有一个具有该名称的列。并且,没有join
条件TABLE2
。让我假设这些是错别字,您的意思是:
SELECT *
FROM TABLE1 LEFT JOIN
TABLE2
ON TABLE1.COLUMN1 = TABLE2.COLUMN2 CROSS JOIN
TABLE3
WHERE TABLE1.COLUMN1 LIKE '%%' AND TABLE2.COLUMN1 = TABLE3.COLUMN1;
比较TABLE2.COLUMN1 = TABLE3.COLUMN1
将LEFT JOIN
变为INNER JOIN
,因为NULL
值将导致该比较失败。没有外部联接TABLE3
。因此查询应等效于:
SELECT *
FROM TABLE1 LEFT JOIN
TABLE2
ON TABLE1.COLUMN1 = TABLE2.COLUMN2 JOIN
TABLE3
ON TABLE2.COLUMN1 = TABLE3.COLUMN1
WHERE COLUMN1 LIKE '%%' ;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句