我有一个名为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 EXISTS
或NOT IN
,但不确定如何放置。
答案 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
);