dizi_agg yerine [null] yerine Postgres'te bazı nesneler ve etiketler seçiyorum.Postgres, birleştirme tablosu
nesnelerid
etiketlemeleriid | object_id | tag_id
etiketlerid | tag
Ben toplamak için array_agg
kullanarak, böyle tablolar katılacağım: şema oldukça basit, üç tablo olduğunu etiketleri bir alana dönüştürün:
SELECT objects.*,
array_agg(tags.tag) AS tags,
FROM objects
LEFT JOIN taggings ON objects.id = taggings.object_id
LEFT JOIN tags ON tags.id = taggings.tag_id
Ancak Postgrees bu döndürür: yerine boş bir dizinin
[ null ]
. Etiket yokken boş bir diziyi nasıl döndürebilirim? İade edilen bir boş etiketin olmadığını kontrol ettim.
aggregate docs, "Birleştirme işlevi sıfır olduğunda veya boş bir diziyi gerektiğinde boş bırakmak için kullanılabilir". COALESCE(ARRAY_AGG(tags.tag)) as tags
'u denedim, ancak yine de null olan bir dizi döndürüyor. Ikinci parametre çok sayıda şeyler (örneğin, COALESCE(ARRAY_AGG(tags.tag), ARRAY())
yapmayı denedim, ancak hepsi sözdizimi hatalarıyla sonuçlanır.
Bu cevabı, belki de diğerleri için haksız bir şekilde seçtim çünkü çok daha az sorgu değişikliği içeriyor ve buradaki boş etiket durumu umurumda değil. –
Bu benim de kullandığım cevaptır, ancak 'neden' hakkında daha fazla bilgi edinmek isteyenler için, aşağıdaki fonksiyonun yanı sıra Patrick'ın yanıtına bakınız: https://www.postgresql.org/docs/9.5/static/functions- aggregate.html –