【问题标题】: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 中的“警告”列。
【问题讨论】:
标签:
mysql
sql
join
inner-join
outer-join
【解决方案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 个用户(更快的查询)
- 如果用户没有警告,则默认警告为空白字符串