簡體   English   中英

當根本沒有行時,為什么group_concat帶一行具有空值

[英]Why does the group_concat bring one row with null values when there are no rows at all

我有一個表帖子作為p,表標簽作為pt,表標簽ref作為ptr。

tagsref將具有post和tags表的ID。

我使用了group_concat,並且我沒有使用group by子句,因為在這種情況下,我假設條件是我添加了條件,因此僅返回一行,所以我使用if條件僅過濾一行(p.slug ='once')。 是的,它確實。

問題是當仍然沒有行時,我得到了一個具有空值的行。 在以下sql中,最后一個條件將不會獲取任何結果,因為沒有沒有slug的行為“ none”,所以我根本不會得到任何結果,但是我得到的行中包含空值。

SELECT p.name, p.slug, GROUP_CONCAT(pt.name) as catz 
FROM post_tags pt, post_tagsref ptr, post p  
WHERE p.id = ptr.tid AND ptr.cid = pt.id  AND p.slug = 'none'

人們建議使用group by子句,並提到即使未指定group by子句,group_by聚合函數也將起作用,但結果可能無法預測。

我使用分組依據,並且正在工作。 然而。

post
-----
id  |   name    |   slug
1   |   sam     |   sam
2   |   do do   |   do-do

post_tags
--------------
id  |   name    |   slug
1   |   music   |   music
2   |   movies  |   movies
3   |   tv      |   tv

post_tagsref
------------    
pid |   pcid
1   |   2
1   |   1
2   |   1

以上是表格結構。

如果根本沒有行,那為什么group_concat返回一個空值的行?

這樣的問題的原因是要確保什么是... :)

參考:

當沒有找到ID時,查詢結果將在1行中包含空值

沒有輸入的聚合函數仍然會產生輸出:沒有行的總和為零,計數也為零,平均值為NULL 這種事情使許多查詢保持一致,並且應該是導致獲得NULL的原因。

我沒有使用group by子句,因為在這種情況下,我正在使用if條件來僅過濾一行[…]

您只過濾了一個帖子 ,但是我假設每個帖子可能有多個標簽(否則您將為什么使用group_concat ),因此group_concat將導致多於一行。 因此,您可能需要按帖子ID進行分組。

另請注意,由於您目前正在執行內部聯接,因此根本不會報告沒有標簽的帖子,因此請考慮在此處使用左聯接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM