Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:如何仅选择任何给定组都具有所有给定值的组?_Sql_Mariadb - Fatal编程技术网

SQL:如何仅选择任何给定组都具有所有给定值的组?

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

给出一个这样的表(我通过使用连接和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(它不存在)


编辑:

我只需要输入一个注释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