SQL服务器 - 缺乏自然科学的JOIN / X JOINŸ使用(场)SQL服务器 - 缺乏自然科学

2019-05-12 05:43发布

我刚刚读了对自然JOIN /使用 - 这是(?可悲的是)从SQL Server的当前曲目缺少SQL92功能。

有没有人来自支持这些到SQL Server(或其他非支持-DBMS)一个DBMS - 是他们因为他们的声音是有用的,或一罐蠕虫(这听起来也可能!)?

Answer 1:

我从来没有使用NATURAL JOIN ,因为我不喜欢这样的连接可以这样做只是因为一些列名在两个表中存在,我不打算的可能性。

我用USING偶尔连接语法,但正如经常事实证明,我需要一个更复杂的连接条件比USING可以支持,所以我把它转换成等价ON语法毕竟。



Answer 2:

你会考虑一个DBMS,是真正的关系?:

在教程d [真正关系语言],唯一的“加盟”经营者被称为JOIN,它的意思是“自然连接” ......不应该有其他种类的加入...很少人有过使用经验正确的关系语言。 那些谁拥有的,我强烈怀疑,他们没有过抱怨配对列的一些感觉不便根据他们的名字

资料来源:“ 中列名的重要性由休·达尔文”



Answer 3:

相关SO问题: 自然JOIN比任何更好的选择从那里在性能方面?

自然连接是不是一个方便快捷:这是彻头彻尾的危险。 这是相当罕见的DBMS。

使用是明确的,但给它的局限性,你不能在任何地方使用它等将是一致的,不是吗?



Answer 4:

这是为了方便起见。 不是不可缺少的 ,但它应该有它的地方,例如在交互式查询(每个按键使我们更接近RSI,反正),或手写SQL,即使在生产代码中的一些简单的情况下(是的,我写的。甚至看到JOIN USING严重的代码,除了我自己明智的程序员编写的,但是,我题外话)。

我发现这个问题,希望证实该SS缺少此功能时,我得到了它。 我只是被仇恨针对这种语法量,这是我归因于酸葡萄综合症迷惑。 我觉得逗乐了傲慢口气糖果 (读:语法糖)正在演讲时,对健康不利。 你不需要也无妨。

什么是漂亮的JOIN USING语法是,它不只是在列名 ,同时也对列的别名 ,例如:

-- foreign key "order".customerId references (customer.id)
SELECT c.*, c.id as customerId, o.* from customer c 
join "order" o using (customerId);

我不同意“加入使用会更好,如果只有(...)”同意。 或参数,您可能需要更复杂的条件。 从不同的角度来看,为什么使用JOIN ON ? 为什么不是纯的,并且将所有条件的WHERE子句?

SELECT t1.*, t2.* from t1, t2 where t2.t1_id = t1.id;

我现在可以去疯狂和争论,这是怎么来表达加入干净的方式,并可以立即启动where子句中,你通常需要,无论如何,等等等等增加更多的条件...

所以,你不应该错过这个特殊的语法太大的代价,但没有什么值得高兴的事情没有这样的勇气(“唷,这是接近,所以好不要有悬赏分我幸免了不少苦”)。

所以,虽然我个人使用JOIN ON的99%的时间,我觉得没有幸灾乐祸的时候没有JOIN USINGNATURAL JOIN



Answer 5:

我没有看到在使用或自然的语法的价值 - 为你所遇到的,只有始终如一地实施所以这是从便携性的角度来看最好的。

作为明确也是维护好,除了该方案能有限,无法应付的情况。 我也宁愿我的代码库是一致的。



文章来源: SQL Server - lack of NATURAL JOIN / x JOIN y USING(field)