【发布时间】:2014-08-20 04:32:48
【问题描述】:
假设我们有两个表:
-
contacts具有列的表:id和name -
conversations包含列的表:id和contact_id(FK 到contacts.id)
以下两个查询返回相同的数据:
- 点符号:
SELECT contacts.name, contacts.id, conversations.id FROM contacts INNER JOIN conversations ON contacts.id = conversations.contact_id;
和
- 功能符号:
SELECT contacts.name, contacts.id, conversations.id FROM contacts INNER JOIN conversations ON id(contacts) = contact_id(conversations);
出于纯粹的理论原因,我想了解更多关于第二个(更实用的)版本的信息。这种语法叫什么,我在哪里可以了解更多信息?这是 SQL 标准中的语法还是只是 PostgreSQL?它是高性能的吗?为什么没有得到更广泛的使用?
【问题讨论】:
-
感谢@dude 的评论,但我在这些文档中看不到关于第二种方法
<column_name>(<table_name>)的任何内容。您能更具体地说明在哪里看吗? -
这不是 SQL 标准,这是一个奇怪的 PostgreSQL 历史怪癖,应该避免。有点惊讶还没有人在上面添加弃用警告。
-
@ErwinBrandstetter ANSI/SQL 对此有不同的语法,虽然它看起来很有吸引力——它不应该被使用——它对于任何读者来说都是陷阱,相对于更常见的解决方案而言,它的性能优势为零。
-
我在第一个 Pre Community Postgres - PostgreSQL95 - 命名为投影方法中找到了这段代码 - 所以 20 年前(1994 年)这段代码就在那里。我无法访问旧源。
标签: sql postgresql join