[英]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返回一个空值的行?
这样的问题的原因是要确保什么是... :)
参考:
没有输入的聚合函数仍然会产生输出:没有行的总和为零,计数也为零,平均值为NULL
。 这种事情使许多查询保持一致,并且应该是导致获得NULL
的原因。
我没有使用group by子句,因为在这种情况下,我正在使用if条件来仅过滤一行[…]
您只过滤了一个帖子 ,但是我假设每个帖子可能有多个标签(否则您将为什么使用group_concat
),因此group_concat
将导致多于一行。 因此,您可能需要按帖子ID进行分组。
另请注意,由于您目前正在执行内部联接,因此根本不会报告没有标签的帖子,因此请考虑在此处使用左联接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.