Mysql 如何确保结果至少包含一个ID?

Mysql 如何确保结果至少包含一个ID?,mysql,sql,having,Mysql,Sql,Having,以下查询正在从关系表收集内容ID。它确保我的结果至少有2个关键字匹配 我的问题是我还有一个“硬关键字”(比如ID127),这意味着我需要确保硬关键字是必须包含的。我想我需要修改我的having子句,但我不知道如何修改 从“内容”关键字中选择*` 其中,`keyword_id`in(127162249567) 按“内容”id分组` 具有计数(不同的'keyword_id`)>=2 按“内容”排序` 描述 限制4 您可以添加条件条件: having count(distinct `keyword_i

以下查询正在从关系表收集内容ID。它确保我的结果至少有2个关键字匹配

我的问题是我还有一个“硬关键字”(比如ID127),这意味着我需要确保硬关键字是必须包含的。我想我需要修改我的
having
子句,但我不知道如何修改

从“内容”关键字中选择*`
其中,`keyword_id`in(127162249567)
按“内容”id分组`
具有计数(不同的'keyword_id`)>=2
按“内容”排序`
描述
限制4

您可以添加条件条件:

having count(distinct `keyword_id`) >= 2 and
       sum(case when keyword_id = 127 then 1 else 0 end) > 0
如果您使用的是MySQL(如背景标记所示),则可以使用快捷方式:

having count(distinct `keyword_id`) >= 2 and
       sum( keyword_id = 127 ) > 0

虽然你有一个很好的解决方案,但既然我已经准备好了,我在这里分享

模式:

 create table contents__keywords (content_id int ,keyword_id int);
 insert into contents__keywords values(100,127);
 insert into contents__keywords values(100,162);
 insert into contents__keywords values(101,249);
 insert into contents__keywords values(102,127);
查询:

 select content_id,count(distinct keyword_id) keyword_id_count,sum(case when keyword_id=127 then 1 else 0 end)keyword_id102_count
 from contents__keywords 
 where keyword_id in (127, 162, 249, 567)
 group by content_id
 having count(distinct keyword_id)>= 2 or keyword_id102_count>=1
 order by content_id
 desc
 limit 4
输出:

内容标识 关键字\u id\u计数 关键字\u id102\u计数 102 1. 1. 100 2. 1.
用您正在使用的数据库标记您的问题。请注意,您的
GROUP BY
子句和
SELECT
列表不一致,应导致错误。我想你只是简单地简化了问题的查询。谢谢你,
sum
,当然。。。Idk我的思想所在。不,我实际上需要
。看起来到目前为止一切都很好,从我的桌子上得到了我想要的结果。非常抱歉我的误解。我完全搞错了。