我有以下查询。指定的电子邮件和传递不对应于表中的任何行,因此它不应返回任何行,这就是发生的情况。
SELECT *
FROM _users
LEFT JOIN _assocs ON
item_id = _users.id AND
item_type = "_users.user_group" AND
foreign_item_type = "_user_groups"
WHERE
email = 'some@email.com' AND
password = 'somepass' AND
activation_key IS NULL
LIMIT 1
但是,当我将SELECT
部分修改为
SELECT GROUP_CONCAT(foreign_item_id) AS user_groups
...它始终返回一行,无论如何,所有列都具有空值。为什么呢?
我正在使用左连接,因为它可能不会从表2(_assocs)返回任何内容。
答案 0 :(得分:1)
函数group_concat()
是一个聚合函数(例如MIN()
,MAX()
,SUM()
和AVG()
)。
这会将查询转换为聚合查询,没有group by
子句。对于这样的查询,所有行都被视为单个集合,并返回一行来汇总它们。当结果集没有行时,这些甚至是正确的。如您所见,结果是列中包含NULL
的一行。
答案 1 :(得分:0)
根据mysql docs,当没有为GROUP_CONCAT
函数提供非null值时,返回值为null,