MySQL-左加入而不是

| 我试图避免子查询,因为它们通常比适当的连接具有更低的性能。 这是我当前无法正常工作的查询:
SELECT 
    a.`email_list_id`, a.`category_id`, a.`name`
FROM 
    `email_lists`AS a 
    LEFT JOIN `email_autoresponders` AS b 
        ON ( a.`website_id` = b.`website_id` ) 
WHERE 
    a.`website_id` = [...]
    AND a.`category_id` <> 0 
    AND a.`email_list_id` <> b.`email_list_id` 
GROUP BY 
    a.`email_list_id` 
ORDER BY a.`name`
该查询有效:
SELECT 
    `email_list_id`, `category_id`, `name` 
FROM 
    `email_lists` 
WHERE 
    `website_id` = [...] 
    AND `category_id` <> 0 
    AND `email_list_id` NOT IN ( 
        SELECT 
            `email_list_id` 
        FROM 
            `email_autoresponders` 
        WHERE `website_id` = [...] 
    ) 
GROUP BY 
    `email_list_id` 
ORDER BY 
    `name` 
有什么办法可以通过左联接做到这一点?我尝试了许多不同的选择。     
已邀请:
        经过重新考虑后,我相信这可能会起作用:
SELECT 
    a.`email_list_id`, a.`category_id`, a.`name`
FROM 
    `email_lists`AS a 
    LEFT JOIN `email_autoresponders` AS b 
        ON ( a.`website_id` = b.`website_id` and a.`email_list_id` = b.`email_list_id` ) 
WHERE 
    a.`website_id` = [...]
    AND a.`category_id` <> 0 
    AND b.`email_list_id` is NULL
GROUP BY 
    a.`email_list_id` 
ORDER BY a.`name`
    
        首先,将,3ѭ的不等式检查添加到联接条件中,而不要在WHERE子句中使用它:
LEFT JOIN `email_autoresponders` AS b 
    ON ( a.`website_id` = b.`website_id` 
         AND a.`email_list_id` <> b.`email_list_id` ) 
尽管我不确定您提到的方案是否需要进行大量优化,但这是使用联接而不是子查询的一种方法。     

要回复问题请先登录注册