gpt4 book ai didi

当查询中引用空表时,MySQL 返回空集(即使它未被使用)

转载 作者:行者123 更新时间:2023-11-29 02:05:02 25 4
gpt4 key购买 nike

我正在执行以下查询:

SELECT DISTINCT users.user_id, users.email, users.irc_nickname FROM users, user_group_map, user_locale_map WHERE (1=1) GROUP BY users.user_id ORDER BY users.email;

此查询由几部分连接而成,因此有点次优(它引用了三个表,但仅从一个表中进行选择),但这应该不是问题所在。问题是当user_locale_map 表恰好为空时,MySQL 会为结果返回一个空集。但是只要我向该表添加至少一行,例如:

INSERT INTO user_group_map values(2,1);

,我开始得到预期的结果。

谁能告诉我这是怎么回事,为什么?这是 MySQL 中的错误,还是预期的行为?如果是后者,我该如何解决?

最佳答案

select 语句对表进行笛卡尔积。
然后将 WHERE 子句用作过滤器以减小结果集的大小。

输入中的空表将导致空输出集(甚至在应用 WHERE 子句之前)。

您正在寻找的是 OUTER JOIN(google 一下)。

使用 MYSQL 语法的示例(因为这是我最近使用的)。
http://dev.mysql.com/doc/refman/5.0/en/outer-join-simplification.html

SELECT DISTINCT users.user_id, users.email, users.irc_nickname
FROM user_group_map
RIGHT JOIN users ON (user_id)
RIGHT JOIN user_locale_map ON (user_id)
WHERE (1=1)
GROUP BY users.user_id
ORDER BY users.email;

这里的user成员和user_locale_map可以为NULL

关于当查询中引用空表时,MySQL 返回空集(即使它未被使用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8035122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com