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

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(子查询)”评估为真?

为啥我的 plpgsql 函数不返回任何行

为啥我的 where 语句没有返回结果?

为啥这个 PHP MongoDB 查询即使有结果也不返回任何结果?

为啥 CodeIgniter 不会在括号中返回 SQL 查询的结果?