MySQL 避免 WHERE/AND 中的子查询重复

标签 mysql sql subquery reusability

我有一个 SQL 查询,我在 WHERE 子句中使用子查询。然后我需要再次使用相同的子查询将其与不同的列进行比较。

我假设没有办法在子查询之外访问“emp_education_list li”?

我猜子查询重复是多余的。坦率地说,我对 SQL 有点生疏。

SELECT e.fname, e.lname
    FROM employee e, emp_education_list l
    WHERE
        e.skillsID = l.skillsID
    AND
    (
        SELECT li.educationID
            FROM emp_education_list li, job j
            WHERE j.skillsID = li.skillsID
            AND j.jobID = 1001
    ) = l.educationID
    AND
    (
        SELECT li.edu_level
            FROM emp_education_list li, job j
            WHERE j.skillsID = li.skillsID
            AND j.jobID = 1001
    ) < l.edu_level
;

最佳答案

尝试一下,

SELECT  e.fname, e.lname
FROM    employee e 
        INNER JOIN emp_education_list l
            ON e.skillsID = l.skillsID
        INNER JOIN
        (
            SELECT  li.educationID, li.edu_level
            FROM    emp_education_list li
                    INNER JOIN job j 
                        ON j.skillsID = li.skillsID
            WHERE   j.jobID = 1001
        ) x ON  l.educationID = x.educationID
WHERE   x.edu_level < l.edu_level

关于MySQL 避免 WHERE/AND 中的子查询重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18756063/

相关文章:

mysql 按 order by desc 不使用子查询获取最新记录

sql - 创建具有特定格式的自定义数据类型

MySQL:更新表中匹配另一个查询结果的所有行

sql - Postgresql - 使用带有更改序列表达式的子查询

mysql - 使用相关子查询比连接更好吗? (索引视角)

mysql - 如何从sql表中破译这个字符串?

mysql - PHPMYADMIN 中的 SQL

java - 数据库错误=ORA-01407 : cannot update ("XXX" ."XXX" ."VALUE") to NULL.

PHP MySQL 将一张表与另一张表连接两次

SQL Server View 优化帮助(重复子查询、case when 等等...)