我想知道是否有办法使用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;
答案 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