首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL结合IN和NOT IN (类别)

问MySQL结合IN和NOT IN (类别)
EN

Stack Overflow用户
提问于 2018-07-12 15:30:26
回答 1查看 41关注 0票数 0

我有一个白名单和一个分类UID的黑名单。

我想告诉MySQL

  • 我想要所有至少有"57“的页面,但是
  • 我不想要任何有"206“的网页。

通常,我会说"IN (57 )“不包括所有其他东西,比如206,但是某些页面同时包含(57和206),所以这两者都是正确的。不需要的206页仍然包括在内。

以下是查询:

代码语言:javascript
复制
SELECT pages.uid, pages.title
FROM pages 
LEFT JOIN sys_category_record_mm AS cats ON (pages.uid = cats.uid_foreign AND cats.tablenames="pages" AND cats.fieldname="categories") 
WHERE pages.hidden=0 AND pages.deleted=0 
AND cats.uid_local IN (57) 
AND cats.uid_local NOT IN (206) 
ORDER BY (CASE WHEN pages.starttime > 0 THEN pages.starttime ELSE pages.crdate END) DESC 
LIMIT 10

以下是解决此问题的DB Fiddle:

https://www.db-fiddle.com/f/fxGQbBVZHb8aJDJ4eiTUW1/0

我没有主意了。任何帮助/暗示都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-12 15:35:12

对于group by和having,我发现这种逻辑最简单。

代码语言:javascript
复制
select c.uid_foreign
from sys_category_record_mm c
where c.tablenames = 'pages' AND c.fieldname = 'categories' 
group by c.uid_foreign
having sum(c.uid_local in (57)) > 0 and
       sum(c.uid_local in (206)) = 0;

您可以重新加入到您的页面以获得更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51309519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档