mysql - 在 MySQL 中用连接替换子查询

标签 mysql sql join subquery

我有以下查询:

SELECT PKID, QuestionText, Type 
FROM Questions 
WHERE PKID IN (
    SELECT FirstQuestion 
    FROM Batch 
    WHERE BatchNumber IN (
        SELECT BatchNumber 
        FROM User 
        WHERE RandomString = '$key'
    )
)

我听说子查询效率低下,首选连接。但是,我找不到任何解释如何将 3+ 层子查询转换为连接表示法的内容,并且无法理解它。

谁能解释一下怎么做?

最佳答案

SELECT  DISTINCT a.*
FROM    Questions a
        INNER JOIN Batch b
            ON a.PKID = b.FirstQuestion
        INNER JOIN User c
            ON b.BatchNumber = c.BatchNumber
WHERE   c.RandomString = '$key'

之所以指定DISTINCT,是因为可能有行与其他表上的多行匹配,导致结果重复记录。但是由于您只对表 Questions 上的记录感兴趣,因此 DISTINCT 关键字就足够了。

要进一步了解有关联接的更多信息,请访问以下链接:

关于mysql - 在 MySQL 中用连接替换子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15091212/

相关文章:

mysql - MySQL 5.1.63-community 中触发器的错误

sql - 查询 WHERE 子句的值范围?

sql - SSIS - 将 nchar 空字符串转换为 int 时出现表达式计算错误

sql - 自然连接和内连接的区别

php - 如何在 CodeIgniter 中使用查询生成器从两个表中选择数据?

验证表中是否已存在用户名和电子邮件时出现 PHP 错误

sql - 从表值函数返回的排序结果

sql - 用join解决子查询错误ORA-01427

android - DISTINCT 与 RANDOM() 排序

mysql - 使用 select 语句创建自定义表 MySQL