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

时间:2011-08-31 17:06:02

标签: mysql sql join inner-join outer-join

为什么这个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中的“警告”列,如果有的话。

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分: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

答案 2 :(得分:2)

更改左连接的内部联接,如下所示:

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

答案 3 :(得分: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 
;
  • 应该是LEFT JOIN而不是INNER JOIN
  • 在尝试加入(更快的查询)之前,重构查询以获得前21个用户
  • 如果用户没有警告,则向空白字符串发出默认警告