SQL:如何仅选择任何给定组都具有所有给定值的组?
给出一个这样的表(我通过使用连接和where得到) 并给出一个或多个注释ID的列表 (100101) 仅查找该帖子没有所有给定评论ID的帖子SQL:如何仅选择任何给定组都具有所有给定值的组?,sql,mariadb,Sql,Mariadb,给出一个这样的表(我通过使用连接和where得到) 并给出一个或多个注释ID的列表 (100101) 仅查找该帖子没有所有给定评论ID的帖子 因此,对于这个表和注释id列表(100101),它应该返回post id(2,3),因为post id 2和3没有注释100和101 注释id列表为(101)时,它应该返回post id(2) 如果comment_id为(103),它应该返回post_id(1,2,3),因为这些帖子没有comment 103(它不存在) 编辑: 我只需要输入一个注释i
因此,对于这个表和注释id列表(100101),它应该返回post id(2,3),因为post id 2和3没有注释100和101 注释id列表为(101)时,它应该返回post id(2) 如果comment_id为(103),它应该返回post_id(1,2,3),因为这些帖子没有comment 103(它不存在)
编辑: 我只需要输入一个注释id就可以让它工作
选择post\u id
从表\u名称
按邮政编码分组
计数(*)等于总和(注释id不在(100)中)
我在Gordon的回答中添加了“不是”以使其生效,但当我使用多个注释时,如:
having count(*)=sum(注释id不在(100102)中)
然后它返回所有post_id(1,2,3)。它应该只带回post_id(2,3)。Post_id 1既有100个注释id,也有102个注释id,因此不能包含在查询中
如何使其接受多个注释ID?您可以使用
分组方式和拥有:
select post_id
from t
group by post_id
having count(*) = sum( comment_id in (2, 3) );
这假定该表没有重复项。如果有可能,那么:
having count(distinct comment_id) = count(distinct case when comment_id in (2, 3) then comment_id end)
编辑:
我一定是看错了原来的帖子。我以为你想要那些有所有评论的。所以你想要:
select post_id
from t
group by post_id
having 2 <> sum( comment_id in (2, 3) );
选择post\u id
从t
按邮政编码分组
有2个总和(第(2,3)条中的注释);
根据您的查询,每篇文章必须有3个评论id的atmost。因此,下面是要查找的查询,但没有相同的查询
SELECT POST_ID FROM TABLE
GROUP BY POST_ID HAVING
COUNT(Distinct COMMENT_ID) <3
从表中选择POST\u ID
按邮政编码分组
COUNT(Distinct COMMENT_ID)您的查询似乎很复杂,一开始您说的是return post,它没有所有的COMMENT_ID,在解释中您是通过COMMENT_ID post output说的。这似乎对我不起作用。我可能把问题解释错了。我对它进行了更改,使其仅适用于一个注释id输入,但似乎无法适用于多个注释。我将编辑我的原始问题。@DanielSunYang。我误解了这个问题。
SELECT POST_ID FROM TABLE
GROUP BY POST_ID HAVING
COUNT(Distinct COMMENT_ID) <3