1

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;
4

2 に答える 2

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;
于 2013-09-11T10:59:12.403 に答える
0

左結合を使用したためです。

データが必要な場合は、またはフィルターをisuser=1使用しますINNER JOINWHERE

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 *でください。列を明示的に指定してください。

于 2013-09-11T10:58:42.227 に答える