在MySQL中用联接替换子查询

Zul*_*ger 6 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'
    )
)
Run Code Online (Sandbox Code Playgroud)

我听说子查询效率低下,因此首选联接。但是,我找不到任何解释如何将3层以上子查询转换为联接表示法的内容,而且也无法解决。

谁能解释怎么做?

Joh*_*Woo 5

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'
Run Code Online (Sandbox Code Playgroud)

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

要进一步获得有关联接的知识,请访问以下链接: