【问题标题】: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 个用户(更快的查询)
        • 如果用户没有警告,则默认警告为空白字符串

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多