【问题标题】:How to explain the outcome?如何解释结果?
【发布时间】:2013-09-11 10:56:55
【问题描述】:

当我执行 SQL 时,为什么结果仍然包含 isuser=1 的数据:

SELECT * 
FROM sys_userdept
LEFT JOIN sys_deptdef sys_deptdef ON sys_userdept.nodeid=sys_deptdef.deptid
AND isuser=0 ORDER BY sys_userdept.pnodeid,sys_userdept.relationid;

【问题讨论】:

    标签: sql database select join


    【解决方案1】:

    那是因为您使用了LEFT JOIN - 它从第一个表中获取所有条记录,即使在加入的表中没有匹配的记录。

    将您的isuser=0 条件移动到WHERE:

    select * 
    from sys_userdept
    left join sys_deptdef sys_deptdef on sys_userdept.nodeid=sys_deptdef.deptid
    where isuser=0
    order by sys_userdept.pnodeid,sys_userdept.relationid;
    

    【讨论】:

      【解决方案2】:

      因为您使用了左连接。

      如果您想要isuser=1 的数据,请使用INNER JOIN 或过滤WHERE

      SELECT * 
      FROM sys_userdept
      LEFT JOIN sys_deptdef sys_deptdef ON sys_userdept.nodeid=sys_deptdef.deptid
      WHERE isuser = 0
      ORDER BY sys_userdept.pnodeid,sys_userdept.relationid;
      

      作为附加说明,请勿使用SELECT *,明确说明您的列。

      【讨论】:

        猜你喜欢
        • 2018-06-14
        • 2021-08-12
        • 2021-05-17
        • 1970-01-01
        • 2014-07-10
        • 2018-12-24
        • 2022-01-11
        • 2017-05-02
        • 2014-07-16
        相关资源
        最近更新 更多