我的查询需要啥,可能不存在或不存在? [复制]
Posted
技术标签:
【中文标题】我的查询需要啥,可能不存在或不存在? [复制]【英文标题】:What do I need in my query, perhaps NOT EXISTS or NOT IN? [duplicate]我的查询需要什么,可能不存在或不存在? [复制] 【发布时间】:2019-11-03 05:01:36 【问题描述】:我有一张桌子叫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
不在contacts
表的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
,但不知道应该怎么写。
【问题讨论】:
我发现user_id
和contact_id
的用法非常混乱。这些代表什么?它是什么意思,你想要的查询实际上是做什么的?
应用程序的每个用户都有一个user_id
,它通过php连接到db并做一些事情。 contacts
表,在contact_id
列中,包含10300
的联系人,或任何user_id
已登录的联系人。希望能稍微清除一下...
因此,您需要一个查询,对于还没有任何联系人的任何用户,返回带有public_or_private = 2
的评论并返回撰写这些评论的用户。这仅适用于单个非接触式用户吗?还是多个?
请在发布问题之前彻底研究。答案通常已经在这里。
@KIKOSoftware 是的,正确的。这将适用于任何登录的 user_id。我正在查看下面 alx 的答案,认为他可能已经解决了我的问题。发送。
【参考方案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
【讨论】:
很遗憾,这是一个重复的问题。 @mickmackusa 几乎所有问题在某种程度上都是重复的,你的意思是你选择关闭这个问题。 正确,几乎所有问题都是重复的。 我会说有好的和坏的重复。好的——当以不同方式提出相同的问题时,会添加不同的用例、上下文和搜索关键字。糟糕的问题就是——糟糕的问题:在询问之前太少或没有谷歌搜索。这个不好,顺便说一句。 @alx 太好了,谢谢。您的查询实际上给了我一个我不想要的 :) 但我修改了它 - 我正在使用AND NOT EXISTS
一个 - 到 AND NOT EXISTS(SELECT * FROM contacts WHERE contacts.contact_id = category.user_id);
现在它给出了正确的结果。以上是关于我的查询需要啥,可能不存在或不存在? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
从具有不同基因的受试者列表中创建一个矩阵,这些基因存在或不存在于 python
错误:表可能不存在或不受支持的关系类型代码:25350 上下文:查询:0 位置:mysqlclient.cpp:255 进程:padbmaster [pid=15091]