是否会导致对相关子查询进行求值,与联接相比,该子查询是次优的?或者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
);