我试图将其作为单个查询运行,但由于重复的子查询仅执行一次,我认为使用 JOIN 子句可能是可能的,但我不确定它是否可行,因为我正在查找名称和角色场来自同一行 3 次?我能想到的唯一方法是从我的代码中执行一次子查询,以获取要注入(inject)到此主查询中的角色和名称值。
SELECT id, isActive, role
FROM accountMembers
WHERE account=:acc
AND isActive=true
AND (
(
name > (SELECT name FROM accountMembers WHERE account=:acc AND id =:id)
AND role = (SELECT role FROM accountMembers WHERE account=:acc AND id =:id)
)
OR role > (SELECT role FROM accountMembers WHERE account=:acc AND id =:id)
)
ORDER BY role ASC, name ASC LIMIT :lim
最佳答案
MySQL 支持元组比较:
SELECT am.*
FROM accountMembers am
WHERE am.account = :acc and
am.isActive = true and
(am.role, am.name) > (select am2.role, am2.name
from accountMembers am2
where am2.account = :acc AND am2.id =:id
);
即使没有这个,您也可以将逻辑移至 from
子句:
SELECT am.*
FROM accountMembers am JOIN
ON am2.account = :acc AND am2.id =:id
WHERE am.account = :acc and
am.isActive = true and
(am.role > am2.role or
am.role = am2.role and am.name > am2.name
);
关于mysql - 是否可以减少重复的子查询查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47254992/