2012-12-07 33 views
0

我的表格標籤爲p,表標籤爲pt,表tagref爲ptr。爲什麼group_concat在沒有行的情況下帶有空值的一行

tagsref將具有帖子和標籤表的ID。

我用group_concat和我沒有使用group by子句,因爲在條件我使用if條件來只過濾一行(p.slug ='一次')假設由於我已經添加了條件只有一行將返回。是的,它確實。

問題是當沒有行時,我仍然得到一個空值的行。在下面的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 聚合功能將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返回一個空值的行?

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

參考:

Query is resulting in 1 row with null values when id is not found

回答

0

沒有輸入聚合函數往往仍然產生輸出:沒有行的總和爲零,計數也爲零,平均值爲NULL。這種事情使很多查詢一致,並應該是你爲什麼得到NULL

我沒有,因爲在條件我使用的是由子句中使用組,如果條件來篩選只有一行[...]

您進行過濾,僅一個,但我相信有可能是每個帖子有多個標籤(否則爲什麼你會使用group_concat),所以連接會導致多行。因此,您可能需要按帖子ID進行分組。

另請注意,由於您此刻正在進行內部連接,因此根本沒有標籤的帖子將不會被報告,因此請考慮在那裏使用左連接。

+0

如果未選擇標籤,則此代碼不會插入到表中。無論如何,這是一個有效的點,我會更新它。你最後說過的那個。此外,我會用例子爲你的其他觀點做一些試驗和錯誤。 –

相關問題