0

我想知道是否有一种方法可以使用 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;
4

2 回答 2

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
于 2012-07-13T10:03:33.263 回答
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
于 2012-07-13T10:02:19.733 回答