假设我们有两个表:
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?它表现得好吗?为什么它没有得到更广泛的使用?
答案 0 :(得分:1)
它被称为“功能符号” - 与标准的“属性符号”相反。
它是SQL标准的扩展,性能完全相同。
如何解析名称有细微差别。例如:列名优先于以点表示法表示复合类型的函数(属性表示法)。
属性表示法(点表示法)仅适用于采用单个参数的函数。所以这是一个有限的替代方案,规范的方法是对函数使用函数符号(因此名称)。
另一方面,属性符号只是更短(一个点对两个parens),更便携(符合标准),通常是表格限定列的规范方法。
您可以找到详细信息in the manual here。
这个相关的答案有更详细的解释:
答案 1 :(得分:1)
功能表示法非常过时 - 它是非SQL时代的工件。
不要在生产项目中使用它。它对性能没有影响 - 差异在解析器和分析器级别上得到解决,但对于SQL标准没有任何意义。