【问题标题】:SQL AND and OR in 1-N mapping table [duplicate]1-N 映射表中的 SQL AND 和 OR [重复]
【发布时间】:2012-11-15 07:41:29
【问题描述】:

可能重复:
MySQL select join where AND where

嗯,我有一张桌子 -

 id  map_id     
 -----------
 100   1
 100   2
 101   1
 101   2
 101   3
 102   3

现在,我需要对这些数据进行 AND 和 OR 运算。也就是说,

或 - 我必须获取 map_id 为 1 或 3 的所有行的 id。因此,如果我查找 1 或 3,则查询应返回

   100
   102

我可以简单地做到这一点

从 map_id IN (1,3) 的表中选择 id

AND - 如果我查询 1 和 2,那么我想要 ids 100 和 101。而且,我找不到查询。

我最初认为像这样的简单查询应该可以工作,但我错了。

从 map_id = 1 AND map_id = 2 的表中选择 id [不起作用]

我想得到这样的结果,但我的查询没有给我这个。我不想诉诸子查询或连接,好吧,除非我真的不需要。我尝试按 id 分组并使用不同的有子句,但我找到了解决方案。

   100
   101

【问题讨论】:

  • SELECT id FROM table WHERE map_id IN (1,2) GROUP BY ID HAVING COUNT(DISTINCT map_id) = 2

标签: sql


【解决方案1】:

试试这个

select id 
from yourtable
where map_id IN (1,2)
group by id
having COUNT(distinct map_id)=2 -- where this 2 is the number of items you want to find

这种技术称为关系除法。

【讨论】:

  • having COUNT(*)=2 将在 map_id 上为每个ID 设置唯一约束,无论如何+1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 2023-03-22
  • 2018-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
相关资源
最近更新 更多