我不使用using语法,因为
- 我的大部分的连接并不适合它(不是被匹配的相同的字段名,和/或多个匹配的连接)和
- 它不是立即明显它转化为与两个以上的表
即假设有“身份证”和“ID_2”列3代表的情况下,确实
T1 JOIN T2 USING(id) JOIN T3 USING(id_2)
成为
T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T1.id_2=T3.id_2 AND T2.id_2=T3.id_2)
或
T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T2.id_2=T3.id_2)
还是其他什么东西来着?
对于某个特定的数据库版本来说,这是一个相当简单的练习,但我没有很大的信心认为它在所有数据库中都是一致的,并且我不是唯一一个必须维护我的代码(所以其他人也必须知道它相当于什么)。
与其中Vs上的明显的区别是如果连接是外:
假定T1与单个ID字段,包含值1,并用ID和值字段一个T2一行(一个行,ID = 1,VALUE = 6),则我们得到:
SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID) WHERE T2.VALUE=42
没有给出的行中,由于在需要进行匹配,而
SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID AND T2.VALUE=42)
会给一行与所述值
1, NULL, NULL
由于ON仅用于匹配连接,因为连接是可选的,因为它是外部连接。列
只是出于兴趣你使用的数据库是什么?我只是尝试了SQL Server上的USING语法,它似乎不起作用。 – 2008-12-16 16:13:36
我正在使用MySQL – Pyrolistical 2008-12-16 17:47:05