Mysql 筛选出其他表中引用的行的有效方法

Mysql 筛选出其他表中引用的行的有效方法,mysql,join,Mysql,Join,我想知道是否有一种方法可以使用JOIN操作,或者使用不涉及子查询的任何其他方法,过滤在不同表中具有相应行的行 这是我唯一能想到的,但是它使用子查询,我担心它在处理非常大的表时会变得非常慢 SELECT * FROM `reports` as R WHERE ( SELECT COUNT(*) FROM `report_deletes` as RD WHERE RD.report_id = R.id AND RD.user_id = 1

我想知道是否有一种方法可以使用JOIN操作,或者使用不涉及子查询的任何其他方法,过滤在不同表中具有相应行的行

这是我唯一能想到的,但是它使用子查询,我担心它在处理非常大的表时会变得非常慢

SELECT * FROM `reports` as R WHERE (
    SELECT COUNT(*) 
    FROM `report_deletes` as RD 
    WHERE 
        RD.report_id = R.id AND
        RD.user_id = 1
) = 0;
您可以尝试使用“左连接”,如下所示:

SELECT *, COUNT(RD.*) as 'count' FROM `reports` as R 
LEFT JOIN `report_deletes` as RD ON (
RD.report_id = R.id )
WHERE 
RD.user_id = 1
AND count = 0
GROUP BY R.id

使用左联接并检查是否为空:

SELECT r.* 
FROM reports r 
LEFT JOIN report_deletes rd on r.id = rd.report_id and rd.user_id = 1 
WHERE rd.report_id IS NULL

我认为这张海报会很棒: