mysql - 优化从3个表mysql中选择元素的查询

标签 mysql select join

数据库如下:

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/

相关文章:

MySQL 5.7 - JSON 索引 - 生成具有非标量值的列

java - 奥尼多多 : SQLException occurs: Unknown column 'xxx' in 'field list'

jQuery UI Select 与验证插件结合使用

mysql - 连接表计数导致返回 1 行

mysql - SQL中如何连接表

mysql - 数据库模式中的外键过多(冗余?)

mysql - 如何检查 MySQL 中的列是否为空或 null?

PHP 未正确回显下拉菜单的值

MySQL:根据原始表中的数据创建频率新表

r - 使用精确匹配和模糊匹配在 R 中连接两个大型数据集