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

Mysql 为什么在根本没有行的情况下,group_concat会带来一行空值,mysql,group-concat,Mysql,Group Concat,我有一个表柱作为p,表标签作为pt,表标签作为ptr tagsref将具有post和tags表的id 我使用了group_concat,而没有使用group by子句,因为在条件中,我使用if条件只过滤一行p.slug='once',假设因为我添加了条件,所以只返回一行。是的 问题是当没有行的时候,我得到了一个空值的行。在下面的sql中,最后一个条件将不会获取任何结果,因为没有slug为“none”的行,所以我根本不应该获取任何结果,但我得到了一个null值的行 SELECT p.name, p

我有一个表柱作为p,表标签作为pt,表标签作为ptr

tagsref将具有post和tags表的id

我使用了group_concat,而没有使用group by子句,因为在条件中,我使用if条件只过滤一行p.slug='once',假设因为我添加了条件,所以只返回一行。是的

问题是当没有行的时候,我得到了一个空值的行。在下面的sql中,最后一个条件将不会获取任何结果,因为没有slug为“none”的行,所以我根本不应该获取任何结果,但我得到了一个null值的行

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'
人们建议使用GROUPBY子句,并提到GROUPBY 即使GROUPBY子句不可用,聚合函数也可以工作 指定,但结果可能不可预测

我以前是小组成员,现在正在工作。然而

以上是表格结构

如果根本没有行,那么为什么group_concat返回一行空值

提出这样一个问题的原因是为了确定什么是什么…:

参考:


没有输入的聚合函数倾向于产生输出:没有行的总和为零,计数也为零,平均值为空。这种情况会使许多查询保持一致,这应该是得到NULL的原因

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

您只筛选到一篇文章,但我假设每篇文章可能有多个标记,否则为什么要使用group_concat,这样连接将产生多行。因此,您可能希望按post id进行分组


还注意到,当你正在做内部连接时,一个没有标签的帖子将不会被报告,所以考虑使用左边的连接。< /P>如果没有选择标签,这个代码就不会插入表中。无论如何,这是一个有效的点,我会更新它。你上次说的那个。除此之外,我将用一些例子对你的其他观点做一些尝试和错误。

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