【问题标题】:Left JOIN query not displaying dataLeft JOIN 查询不显示数据
【发布时间】:2018-11-15 07:19:30
【问题描述】:
SELECT Name,Checktime 
FROM Userinfo 
LEFT JOIN Checkinout ON USERINFO.USERID = CHECKINOUT.USERID 
WHERE Checktime >= #11/14/18 04:35:00 AM#;       

上述查询必须显示来自userinfo 表的所有名称,但它只显示与签出表匹配的数据。

【问题讨论】:

  • 当然它会从结帐表中显示,因为您使用的是RIGHT JOIN
  • 即使,我改成左 JOIN 仍然得到相同的数据
  • 您使用的是哪个 dbms?
  • 添加一些示例表数据和预期结果 - 全部作为格式化文本,而不是图像(或图像链接......)
  • 女士访问,我已添加图片

标签: php sql ms-access


【解决方案1】:

在大多数数据库中,您会将条件移至ON 子句:

SELECT ui.Name, cio.Checktime 
FROM Userinfo as ui LEFT JOIN
     Checkinout as cio
     ON ui.USERID = cio.USERID AND
        cio.Checktime >= #11/14/18 04:35:00 AM#;  

唉,MS Access 不支持这种标准语法。您可以改用子查询:

SELECT ui.Name, cio.Checktime 
FROM Userinfo as ui LEFT JOIN
     (SELECT cio.*
      FROM Checkinout as cio
      WHERE cio.Checktime >= #11/14/18 04:35:00 AM#
     ) as cio
     ON ui.USERID = cio.USERID ;

【讨论】:

    【解决方案2】:

    您的问题标题为LEFT JOIN not working,但在您的查询中,您使用的是RIGHT JOIN

    只需在查询中使用LEFT JOIN。它将列出来自USERINFO 的所有用户,但仅列出来自CHECKINOUT 的匹配记录。

    SELECT `Name`, `Checktime`
    FROM `Userinfo`
    LEFT JOIN `Checkinout` ON `USERINFO`.`USERID` = `CHECKINOUT`.`USERID`
    Where `Checktime` >= #11/14/18 04:35:00 AM#;
    

    【讨论】:

    • 不,还是一样的数据
    • 在您的问题中添加两个表中的示例数据,然后我将能够进一步评论。
    • 请查看图片
    【解决方案3】:

    您可以在每个表上设置别名

    SELECT a.*,b.* 
    FROM Userinfo  a
    LEFT JOIN Checkinout b ON a.USERID = b.USERID 
    Where b.Checktime>=#11/14/18 04:35:00 AM#;  
    

    【讨论】:

      【解决方案4】:

      如果要显示用户信息中的所有名称并显示签出表中的匹配数据,只需将 RIGHT JOIN 更改为 LEFT JOIN。

      SELECT Checkinout.USERID, Userinfo.Name, Userinfo.Checktime,
      FROM Userinfo
      LEFT JOIN Checkinout ON USERINFO.USERID = CHECKINOUT.USERID
      WHERE Checktime >= #11/14/18;
      

      试试这个。

      【讨论】:

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