sql - 将子查询转换为联接

标签 sql mysql

您好,是否可以将此子查询转换为联接?

SELECT staff_no
FROM doctor
WHERE NOT EXISTS (SELECT *
                  FROM patient
                  WHERE staff_no = consultant_no);

最佳答案

SELECT  staff_no
FROM    doctor
LEFT JOIN
        patient
ON      staff_no = consultant_no
WHERE   consultant_no IS NULL

为了提高效率,consultant_no 应该被索引并声明为 NOT NULL

如果不是,请在 patient 中选择任何声明为 NOT NULL 的列,并在 WHERE 子句中将 consultant_no 替换为该列。

请参阅我博客中的这篇文章,比较在 MySQL 中执行此查询的三种方法:

关于sql - 将子查询转换为联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1492154/

相关文章:

mysql - 谁能解释为什么当第二个查询给出结果时第一个 SQL 查询给出 0

SQL 为什么 SELECT COUNT(*) , MIN(col), MAX(col) 比 SELECT MIN(col), MAX(col) 更快

mysql - SQL 选择多个最后行

MySQL加入慢查询

c# - .NET 中的 SqlConnection——我怎样才能最好地利用连接池?

sql - 更新表中的每一行

mysql - DB中一个null值会占用多少内存?

mysql - 如何从数据透视表创建多个表

具有日期时间值的 SQL 查询显示不同的结果

MYSQL错误1064 : Create Event