数据库如下:
Classes Challenges Class Challenges
id id id
title class_id
challenge_id
为了获得特定类(class)的所有挑战,我使用以下内容
SELECT
DISTINCT class_challenges.challenge_id,
challenges.title
FROM class_challenges
LEFT JOIN challenges
ON class_challenges.challenge_id = challenges.id
WHERE class_challenges.class_id = :class_id
ORDER BY challenge_id
如何对不属于特定类别的所有挑战执行相同的操作? 到目前为止我使用:
SELECT
DISTINCT challenges.id,
challenges.title
FROM
challenges,
class_challenges
WHERE challenges.id NOT IN(
SELECT
DISTINCT class_challenges.challenge_id
FROM class_challenges
LEFT JOIN challenges
ON class_challenges.challenge_id = challenges.id
WHERE class_challenges.class_id = :class_id
ORDER BY challenge_id
);
我认为可以写得更好。 (也许使用双连接?)
那么,如何优化(如果可以的话?)
最佳答案
尝试这个查询
SELECT
t.id,
t.title,
t.CCID
FROM
(
SELECT
challenges.id,
challenges.title,
class_challenges.id as CCID
FROM
challenges
LEFT JOIN class_challenges
ON class_challenges.challenge_id = challenges.id
) as t
WHERE t.CCID IS NULL
关于mysql - 优化从3个表mysql中选择元素的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14091846/