为什么我的查询没有返回任何结果?

3
为什么此 SQL 查询仅在用户警告中只有一行时才显示结果?
SELECT 
 u.id, 
 uw.warning 
FROM 
 users u
 INNER JOIN users_warnings uw ON (
  u.id = uw.uID
 )
LIMIT 21

我希望显示所有用户,但如果有的话,也获取users_warnings表中的“warning”列。

4个回答

6

因为你正在使用 inner join,它需要在连接表上存在一行数据。请尝试以下方法:

SELECT 
 u.id, 
 uw.warning 
FROM 
 users u
 LEFT JOIN users_warnings uw ON (
  u.id = uw.uID
 )
LIMIT 21

6

INNER JOIN 只有在两个表中都有数据的情况下才会返回结果。
可以尝试使用 LEFT JOIN 替代。

SELECT u.id, uw.warning FROM users u
            LEFT JOIN users_warnings uw ON (u.id = uw.uID)
            LIMIT 21

这更可能是你想要的,而不是外连接。 - kralco626

2
将您的内连接改为左连接,如下所示:

将您的内连接改为左连接,如下所示:

SELECT u.id, uw.warning FROM users u
                LEFT JOIN users_warnings uw ON (u.id = uw.uID)
                LIMIT 21

1
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 
;
  • 应该使用左连接而不是内连接
  • 重构了查询,在尝试 JOIN 之前获取前21个用户(更快的查询)
  • 如果用户没有警告,则默认警告为空字符串

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