我在查询中需要什么,也许不存在或不在?

What do I need in my query, perhaps NOT EXISTS or NOT IN?

我有一个 table 叫 review:

review_id   cat_id   public_or_private
1           1              0
11          2              2
12          3              1
13          4              2
14          5              2

还有一个 table 叫做 category:

cat_id   user_id  
1        10298            
2        10299
3        10300
4        10299
5        10298

我的发言:

$sql2 = "SELECT * 
        FROM review 
            INNER JOIN category ON review.cat_id = category.cat_id 
        WHERE review.public_or_private = 2"; 

这会给我结果:

review_id   cat_id   public_or_private   cat_id   user_id              
    11          2              2           2        10299
    13          4              2           4        10299
    14          5              2           5        10298

contacts table:

user_id    contact_id
10299       10298
10299       10300
10300       10298
10300       10301

我怎样才能进一步磨练它? : 如果 user_id 不在 contacts table 的 contact_id 列中,我只想要结果。

所以从用户 10300 的角度来看,结果应该是:

review_id   cat_id   public_or_private   cat_id   user_id              
    11          2              2           2        10299
    13          4              2           4        10299

我认为我应该使用 NOT EXISTSNOT IN 但不确定我应该如何使用它。

我想这就是你想要的:

SELECT * 
        FROM review 
            INNER JOIN category ON review.cat_id = category.cat_id
            LEFT JOIN contacts ON contacts.user_id = category.user_id
        WHERE review.public_or_private = 2
        AND contacts.contact_id IS NULL

下面是支持该声明的示例:http://www.sqlfiddle.com/#!9/7bfb62/3

这也有效:

SELECT * 
        FROM review 
            INNER JOIN category ON review.cat_id = category.cat_id
        WHERE review.public_or_private = 2
        AND NOT EXISTS(
            SELECT *
            FROM contacts
            WHERE contacts.user_id = category.user_id
       );

这里更新了fiddle:http://www.sqlfiddle.com/#!9/7bfb62/5