过滤掉其他表中引用的行的有效方法

时间:2012-07-13 09:58:39

标签: 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
) = 0;

2 个答案:

答案 0 :(得分:2)

使用左连接并检查NULL:

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

答案 1 :(得分:0)

您可以尝试使用“LEFT JOIN”,如下所示:

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