内连接查询返回所有 NULL 结果,但应该返回无结果。

3

这个查询应该不会返回所有值都是NULL的1条记录。但是当应该有结果时,它似乎可以正常返回。

我使用内连接通过他们表格的主键来获取一些账户详情和评分。一些非主键(多对一)的键具有默认值NULL - 这可能导致它在某种情况下连接了自身?

为什么它会返回所有值都是空的行?

SELECT a.account_id, a.first_name, a.second_name, a.points, c.body, c.creation_time, AVG(t.rating_overall)
FROM comments AS c
INNER JOIN accounts AS a
ON c.account_id=a.account_id
INNER JOIN ratings AS t
ON t.blogger_id=a.account_id
WHERE c.blog_id = ?
ORDER BY c.creation_time ASC"

尝试使用类似于 ISNULL (check_expression, replacement_value) 的语句,将替换值留空或为0。 - MCP_infiltrator
抱歉,我会修改我的问题。我是指一些键而不是主键。 - Amy Neville
3
AVG字段很可能是原因。我认为它给出了所有字段的平均值,即使没有要进行平均的字段。 - Kickstart
你确定在实际发送的查询中没有使用外连接或其他内容吗?你发布的查询不能返回所有字段都设置为 null 的行,因为连接条件中的 null = null 会将它们排除在外。 - Denis de Bernardy
这是我正在使用的查询。我在控制台中尝试使用不同的blog_id,它要么返回一些评论,要么返回1行带有NULL NULL NULL等内容。 - Amy Neville
还有,AVG()函数没有group by子句,请检查查询语句。 - Janne Matikainen
1个回答

2
问题在于您使用了聚合函数(AVG)。这将给您一个单独的行(如果没有GROUP BY子句,即使没有实际匹配的行)。
尝试这个:-
SELECT a.account_id, a.first_name, a.second_name, a.points, c.body, c.creation_time, AVG(t.rating_overall)
FROM comments AS c
INNER JOIN accounts AS a
ON c.account_id=a.account_id
INNER JOIN ratings AS t
ON t.blogger_id=a.account_id
WHERE c.blog_id = ?
GROUP BY a.account_id, a.first_name, a.second_name, a.points, c.body, c.creation_time
ORDER BY c.creation_time ASC

MySQL 返回了一个空结果集(即零行)。 (查询耗时0.0010秒)谢谢你!!;x - Amy Neville

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接