mysql - 是否可以减少重复的子查询查找?

标签 mysql sql

我试图将其作为单个查询运行,但由于重复的子查询仅执行一次,我认为使用 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/

相关文章:

具有不同的php mysql日期提取

MySQL Aurora 数据库实例在 AWS RDS 上自行开启只读

c++ - 删除阻塞插入

SQL Server 2005 - 根据表列中的条件加入

C++:如何将 GUID 设置为 NULL 而不是 GUID_NULL?

sql - 查询返回不同的结果

sql - T-SQL 递归;多重递归?

php - 网页表单不发送输入到mysql数据库

jquery - 将其他数据获取到 django 表单下拉选择中

mysql - 检查存在并与数百万行同步数据