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;
これは、結合されたテーブルに一致するレコードがない場合でも、最初のテーブルからすべての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;
左結合を使用したためです。
データが必要な場合は、またはフィルターを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 *
でください。列を明示的に指定してください。