【mysql】find_in_set 和 in 混合使用查询数据紊乱

1 最开始使用的方法

select u.ID, u.NAME FROM sys_user u WHERE ID
IN ( SELECT o.UID_ FROM sys_user_organization o
WHERE o.OID IN ( SELECT ID FROM sys_organization
WHERE FIND_IN_SET( ID, getChildLst ( '40280049586bcacd01586c0278530314')))) AND u.DEL = 0

期待结果

【mysql】find_in_set 和 in 混合使用查询数据紊乱_第1张图片

实际结果

【mysql】find_in_set 和 in 混合使用查询数据紊乱_第2张图片

2 根据发现,该函数中双in子句下面还嵌套了一个find_in_set子句,所以查询出来的数据是多的。

但是如果将子句一个个拆出来执行,每一个单句结果都是正确的。因此,想到了可能是in和find_in_set混合使用导致的问题

3 修改后的查询语句

select u.ID, u.NAME FROM sys_user u WHERE ID
IN ( SELECT o.UID_ FROM sys_user_organization o
WHERE FIND_IN_SET (o.OID,( SELECT ID FROM sys_organization
WHERE FIND_IN_SET( ID, getChildLst ( '40280049586bcacd01586c0278530314'))))) AND u.DEL = 0

将中间的in改为find_in_set,则结果正常显示

你可能感兴趣的:(SQL)