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 に答える