是否会导致对相关子查询进行求值,与联接相比,该子查询是次优的?或者MySQL能够识别这种模式并生成一个最优的计划吗?我将从这条消息中获取所有的行query@Dai . . . 我不明白你的意思。相关子查询有时是表示某些操作的最快方法。@GordonLino

是否会导致对相关子查询进行求值,与联接相比,该子查询是次优的?或者MySQL能够识别这种模式并生成一个最优的计划吗?我将从这条消息中获取所有的行query@Dai . . . 我不明白你的意思。相关子查询有时是表示某些操作的最快方法。@GordonLino,mysql,sql,Mysql,Sql,是否会导致对相关子查询进行求值,与联接相比,该子查询是次优的?或者MySQL能够识别这种模式并生成一个最优的计划吗?我将从这条消息中获取所有的行query@Dai . . . 我不明白你的意思。相关子查询有时是表示某些操作的最快方法。@GordonLinoff是的,但是可以对m(其中'type'q')中的每一行计算相关子查询,这可能不好,而使用联接运算符表示查询意味着/表明不同的意图。。。我承认我很难选择合适的词语来表达我的意思。Nvm:) SELECT * FROM chekm


是否会导致对相关子查询进行求值,与
联接相比,该子查询是次优的?或者MySQL能够识别这种模式并生成一个最优的计划吗?我将从这条消息中获取所有的行query@Dai . . . 我不明白你的意思。相关子查询有时是表示某些操作的最快方法。@GordonLinoff是的,但是可以对
m
(其中'type'q')中的每一行计算相关子查询,这可能不好,而使用联接运算符表示查询意味着/表明不同的意图。。。我承认我很难选择合适的词语来表达我的意思。Nvm:)
SELECT
    *
FROM
    chekmarc.messages AS a
WHERE
    userid NOT IN
    (
        SELECT
            answeruserid
        FROM
            chekmarc.conversations AS b 
       WHERE
            a.id = b.questionid 
    )
    AND
    a.type != 'Q';
SELECT
    m.*,
    c.*
FROM
    chekmarc.messages m
    INNER JOIN
    (
        SELECT
            *
        FROM
            chekmarc.conversations c 
        WHERE
            answeruserid IS NOT NULL
            AND
            questionid IS NOT NULL
    ) c ON
        c.questionid = m.id
        AND
        m.userid = c.answeruserid
WHERE
    m.type != 'Q'
    AND
    m.userid IS NOT NULL
    AND
    m.id IS NOT NULL;
SELECT
    *
FROM
    messages AS m1
    INNER JOIN conversations AS c1 ON m1.conversationid = c1.id
WHERE
    m1.type <> 'Q'
    AND
    m1.userid <> c1.answeruserid
SELECT m.*
FROM  messages 
WHERE m.type <> 'Q' AND
      NOT EXISTS (SELECT 1
                  FROM conversations c
                  WHERE m.id = c.questionid AND
                        m.userid = c.answeruserid
                 );