2012-07-13 36 views
0

我想知道是否有一種方法可以使用JOIN操作過濾不同表中的相應行的行,或者可能使用任何其他不涉及sub查詢。有效的方法來過濾出其他表中引用的行

這是我能想出的唯一東西,但是它使用子查詢,而且我處理非常大的表時恐怕會變得很慢。

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

我覺得這個海報會真棒:http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – Matt 2012-07-13 10:04:25

回答

2

使用LEFT JOIN和檢查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 
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 
相關問題