即使该结果为null,也返回数组中的所有结果

时间:2015-12-07 11:49:04

标签: arrays postgresql

我试图回来:

  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我希望自动返回0null

我正在使用PostgreSQL 9.4.x

1 个答案:

答案 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;