Mysql 筛选出其他表中引用的行的有效方法
我想知道是否有一种方法可以使用JOIN操作,或者使用不涉及子查询的任何其他方法,过滤在不同表中具有相应行的行 这是我唯一能想到的,但是它使用子查询,我担心它在处理非常大的表时会变得非常慢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
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
我认为这张海报会很棒: