代码之家  ›  专栏  ›  技术社区  ›  Will A

SQL Server-缺少自然联接/X联接Y使用(字段)

  •  8
  • Will A  · 技术社区  · 14 年前

    我刚刚读了一些关于自然连接/使用-sql92特性的文章(很遗憾?)SQL Server的当前剧目中缺少。

    是否有人来自一个支持SQL Server的DBMS(或另一个不支持的DBMS)——它们是否和声音一样有用,还是一罐蠕虫(听起来也可能!)?

    5 回复  |  直到 9 年前
        1
  •  15
  •   Bill Karwin    14 年前

    我从不使用 NATURAL JOIN 因为我不喜欢联接可以做一些我不想做的事情,只是因为两个表中都存在某个列名。

    我确实使用了 USING 连接语法偶尔也会出现,但通常情况下,我需要的连接条件比 使用 可以支持,因此我将其转换为等效的 ON 毕竟是语法。

        2
  •  8
  •   onedaywhen    14 年前

    你会考虑一个真正相关的DBMS吗?:

    在教程D[真正的关系 语言),唯一的__join_运算符是 叫做join,意思是自然 加入…不应该有其他种类的 加入…很少有人有 使用适当工具的经验 关系语言。那些人 有,我强烈怀疑 他们曾经抱怨过 感觉配对不便 列根据其名称

    资料来源: The Importance of Column Names “作者:休·达文

        3
  •  2
  •   Community CDub    7 年前

    相关销售代表问题: is NATURAL JOIN any better than SELECT FROM WHERE in terms of performance ?

    一个自然的连接不是一个方便的捷径:它完全是危险的。在数据库管理系统中很少见。

    使用是明确的,但是考虑到它的局限性,你不能在任何地方都使用它,所以这是一致的,不是吗?

        4
  •  2
  •   Tomasz Gandor    9 年前

    这是一个方便的问题。 不是必不可少的 但是它应该有自己的位置,例如在交互式查询中(无论如何,每按一次键都会使我们更接近RSI),或者一些简单的手写SQL案例 生产代码 (是的,我写的。甚至看到 JOIN USING 用严肃的代码,由聪明的程序员而不是我自己写的。但是,我离题了)。

    我在寻找SS是否缺少此功能的确认信息时发现了这个问题,并得到了它。我只是对这种语法的仇恨感到困惑,我把它归因于酸葡萄综合症。当我以一种居高临下的语气被训斥时,我感到很好笑。 糖果 (阅读:句法糖) 对你的健康有害。反正你也不需要。

    里面有什么好吃的 加入使用 语法,它不仅仅在 列名 ,而且还 列别名 例如:

    -- 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子句中添加更多的条件,无论如何你通常都需要这些条件,blah blah……

    所以你不应该错过这个特别的语法,但是没有它没有什么值得高兴的。( “哎呀,就这么近了。所以最好不要使用join。我没有那么多痛苦” )

    所以,当我个人使用 加入 99%的时候,我没有感到幸灾乐祸 加入使用 NATURAL JOIN .

        5
  •  1
  •   OMG Ponies    14 年前

    我看不到使用或自然语法的价值——正如您所遇到的,只有on被一致地实现,所以从可移植性的角度来看它是最好的。

    明确也有利于维护,此外,替代方案可能太有限,无法处理情况。我也希望我的代码库是一致的。