我试图回来:
id | count | product | location
---------------------------------
123 | 10 | acme 1 | 1
---------------------------------
423 | null | null | null
---------------------------------
8766 | 3 | wiley 1 | 1
---------------------------------
5232 | 15 | wiley 2 | 1
---------------------------------
你可以查看上一个问题here我可以返回数据,但它不会返回
id's
过滤器未返回的项目。假设id 423
确实存在于数组中,因为过滤器是location = 1,并且此特定id在表中具有4
的位置标识符。但我仍然希望在返回的结果集
我正在使用:
SELECT
t.id
, count(t.id) total
, t.product
, t.location
FROM unnest(Array[123,423,8766,5232]::integer[]) id
LEFT JOIN inventory t
ON t.id IS NOT DISTINCT
FROM id.id
WHERE t.location_id = '1'
GROUP BY 1,3,4;
但它只会返回请求中列出的项目,而不是完整的数组
id's
我希望自动返回0
或null
我正在使用PostgreSQL 9.4.x
答案 0 :(得分:0)
您的查询有两个问题。首先where
子句将outer join
变为inner join
。其次,它计为t.id
,它可以为空,count
不计算空值。固定版本:
select
t.id
, count(*) total
, t.product
, t.location
from
unnest(array[123,423,8766,5232]::integer[]) id (id)
left join
inventory t on t.id = id.id and t.location_id = '1'
group by 1,3,4;