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

时间:2019-06-20 11:20:53

标签: php mysql not-exists notin

我有一个名为review的表:

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

还有一个名为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表:

user_id    contact_id
10299       10298
10299       10300
10300       10298
10300       10301

我该如何进一步磨练? :如果user_id不在contact_id表的contacts列中,我只需要结果。

因此,从用户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,但不确定如何放置。

1 个答案:

答案 0 :(得分:1)

我想这就是你想要的:

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
       );

这是更新的小提琴:http://www.sqlfiddle.com/#!9/7bfb62/5