在PostgreSQL查询中使用功能表示法而不是点表示法

时间:2014-08-20 04:32:49

标签: sql postgresql join

假设我们有两个表:

  1. contacts表包含列:idname
  2. conversations表包含列:idcontact_id(FK到contacts.id
  3. 以下两个查询返回相同的数据:

    • 点符号: 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?它表现得好吗?为什么它没有得到更广泛的使用?

2 个答案:

答案 0 :(得分:1)

它被称为“功能符号” - 与标准的“属性符号”相反。

它是SQL标准的扩展,性能完全相同。

如何解析名称有细微差别。例如:列名优先于以点表示法表示复合类型的函数(属性表示法)。

属性表示法(点表示法)仅适用于采用单个参数的函数。所以这是一个有限的替代方案,规范的方法是对函数使用函数符号(因此名称)。

另一方面,属性符号只是更短(一个点对两个parens),更便携(符合标准),通常是表格限定列的规范方法。

您可以找到详细信息in the manual here

这个相关的答案有更详细的解释:

答案 1 :(得分:1)

功能表示法非常过时 - 它是非SQL时代的工件。

不要在生产项目中使用它。它对性能没有影响 - 差异在解析器和分析器级别上得到解决,但对于SQL标准没有任何意义。