在 Linux 中,不同的 SQL 不适用于 UNNEST

Posted

技术标签:

【中文标题】在 Linux 中,不同的 SQL 不适用于 UNNEST【英文标题】:IN Linux Distinct SQL is not working with UNNEST 【发布时间】:2017-12-06 10:32:14 【问题描述】:

当我在窗口系统中运行此查询时,UNNSET 行为正确 但是当我运行这个查询时,Linux 的行为不同。在不同的行上设置重复记录列表

SELECT DISTINCT 
         "billing_billmanagement"."creation_date",
         "billing_billmanagement"."bill_number",
         unnest(array_agg(DISTINCT "inventory_product"."product_name")) AS "product",
         unnest(array_agg(DISTINCT "services_service"."name")) AS "service"
FROM "billing_billmanagement"
  INNER JOIN "users_staffuser" ON ("billing_billmanagement"."staff_id" = "users_staffuser"."id")
  INNER JOIN "auth_user" ON ("users_staffuser"."user_id" = "auth_user"."id")
  LEFT OUTER JOIN "billing_customerproductbill" ON ("billing_billmanagement"."id" = "billing_customerproductbill"."bill_id")
  LEFT OUTER JOIN "inventory_product" ON ("billing_customerproductbill"."product_id" = "inventory_product"."id")
  LEFT OUTER JOIN "billing_customerservicebill" ON ("billing_billmanagement"."id" = "billing_customerservicebill"."bill_id")
  LEFT OUTER JOIN "services_service" ON ("billing_customerservicebill"."service_id" = "services_service"."id")

WHERE "billing_billmanagement"."creation_date" BETWEEN '2017-12-04' AND '2017-12-06'
GROUP BY billing_billmanagement.creation_date,
         billing_billmanagement.bill_number
ORDER BY "billing_billmanagement"."creation_date" ASC

【问题讨论】:

显示你得到的输出和你期望的输出。并确保在这两种情况下,*all 表中的数据完全相同。这不太可能取决于操作系统。 Windows 版本和 Linux 版本之间存在差异,但unnest() 不是其中之一(主要是字符串比较的结果可能不同)。另外:不鼓励在 SELECT 列表中使用多个集合返回函数(详见手册:postgresql.org/docs/current/static/…) 如果您可以提供一个 Minimal, Complete, and Verifiable example 来显示行为 edit 您的问题,那么您可能会得到更好的答案,请不要发布cmets中的代码。 【参考方案1】:

如果出现重复行是问题,试试这个

 SELECT billing_billmanagement.creation_date,
           billing_billmanagement.bill_number,
           inventory_product.product_name AS product,
           services_service.name AS service
    FROM billing_billmanagement
      INNER JOIN users_staffuser ON (billing_billmanagement.staff_id = users_staffuser.id)
      INNER JOIN auth_user ON (users_staffuser.user_id = auth_user.id)
      LEFT OUTER JOIN billing_customerproductbill ON (billing_billmanagement.id = billing_customerproductbill.bill_id)
      LEFT OUTER JOIN inventory_product ON (billing_customerproductbill.product_id = inventory_product.id)
      LEFT OUTER JOIN billing_customerservicebill ON (billing_billmanagement.id = billing_customerservicebill.bill_id)
      LEFT OUTER JOIN services_service ON (billing_customerservicebill.service_id = services_service.id)
    WHERE billing_billmanagement.creation_date BETWEEN '2017-12-04' AND '2017-12-06'
    GROUP BY 1,
             2,
             3,
             4
    ORDER BY 1 ASC;

【讨论】:

但我的服务栏显示 t .我还需要服务显示 你能发布表格的结构和你想要的输出吗?

以上是关于在 Linux 中,不同的 SQL 不适用于 UNNEST的主要内容,如果未能解决你的问题,请参考以下文章

unaccent() 不适用于 plpgsql 动态查询中的希腊字母

瑞典语标志不适用于 SQL 查询

SQL 不适用于大样本

简单的 SQL 命令不适用于特定参数

SQL SELECT 查询不适用于电子邮件地址

SQL - 如果存在不适用于 Select 语句?