如何解释结果?

时间:2013-09-11 10:56:56

标签: sql database select join

当我执行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;

2 个答案:

答案 0 :(得分:7)

这是因为您使用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;

答案 1 :(得分:0)

因为您使用了左连接。

如果您想要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 *,明确说明您的列。