为啥我的查询没有返回任何结果?
Posted
技术标签:
【中文标题】为啥我的查询没有返回任何结果?【英文标题】:Why doesn't my query return any results?为什么我的查询没有返回任何结果? 【发布时间】:2011-11-07 19:28:05 【问题描述】:为什么这个 sql 查询只显示 users_warnings 中只有一行的结果?
SELECT
u.id,
uw.warning
FROM
users u
INNER JOIN users_warnings uw ON (
u.id = uw.uID
)
LIMIT 21
我希望显示所有用户,但如果有的话,还要抓住 users_warnings 中的“警告”列。
【问题讨论】:
【参考方案1】:INNER JOIN
仅在两个表中都有数据时才会返回。
改用LEFT JOIN
:
SELECT u.id, uw.warning FROM users u
LEFT JOIN users_warnings uw ON (u.id = uw.uID)
LIMIT 21
【讨论】:
这更像是你想要的,而不是外部连接【参考方案2】:因为您使用的是inner join
,它要求联接表上存在一行。请尝试以下操作:
SELECT
u.id,
uw.warning
FROM
users u
LEFT JOIN users_warnings uw ON (
u.id = uw.uID
)
LIMIT 21
【讨论】:
【参考方案3】:将内连接更改为左连接,如下所示:
SELECT u.id, uw.warning FROM users u
LEFT JOIN users_warnings uw ON (u.id = uw.uID)
LIMIT 21
【讨论】:
【参考方案4】:SELECT
u.id,
IFNULL(uw.warning,'') warning
FROM
(SELECT id FROM users LIMIT 21) u
LEFT JOIN users_warnings uw
ON u.id = uw.uID
;
应该是 LEFT JOIN 而不是 INNER JOIN
在尝试 JOIN 之前重构查询以获取前 21 个用户(更快的查询)
如果用户没有警告,则默认警告为空白字符串
【讨论】:
以上是关于为啥我的查询没有返回任何结果?的主要内容,如果未能解决你的问题,请参考以下文章
我在 2 个搜索日期之间检索事件的查询没有返回任何结果,为啥?
如果子查询没有返回结果,为啥“= ALL(子查询)”评估为真?