我在查询中需要什么,也许不存在或不在?
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 EXISTS
或 NOT 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
我有一个 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 EXISTS
或 NOT 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