为什么group_concat在没有行的情况下会带来一行空值

时间:2012-12-07 11:30:21

标签: mysql group-concat

我有一个表格作为p,表格标签为pt,表格tagref为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会返回一行为空值?

这样的问题的原因是为了确定什么是......:)

参考:

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

1 个答案:

答案 0 :(得分:0)

没有输入的聚合函数往往会产生输出:无行的总和为零,计数也为零,平均值为NULL。这种事情会使大量查询保持一致,并且应该是您获得NULL的原因。

  

我没有使用group by子句,因为在条件中我使用if条件只过滤一行[...]

您只过滤了一个帖子,但我认为每个帖子可能有多个标签(否则您为什么会使用group_concat),因此该连接会产生多个行。因此,您可能希望按帖子ID进行分组。

另请注意,当您正在进行内连接时,将不会报告任何没有标记的帖子,因此请考虑使用左连接。