在 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的主要内容,如果未能解决你的问题,请参考以下文章