SQL - 查找年份子集中的所有代码

时间:2017-04-30 00:52:42

标签: sql sqlite select

我有一张表格如下:

Codes
year |  code   |
----------------
2009 | 10001   |
2009 | 10002   |
2009 | 10003   |

2010 | 10001   |
2010 | 10002   |
2010 | 10004   |

2011 | 10001   |
2011 | 10005   |
2011 | 10010   |

如何查找多年来存在的所有代码。例如,如果我想查找2009年和2010年(而不一定是2011年)中存在的所有代码,我应该获得1000110002,因为它们都出现在2009年和2010年。以下是不正确的但我想要类似的东西:

SELECT code FROM Codes
GROUP BY code
HAVING year in (2009,2010)

4 个答案:

答案 0 :(得分:2)

实现这一目标的一种方法是使用INTERSECT操作

 select code from codes where year=2009
 intersect
 select code from codes where year=2010;

这会给你:

code
10001
10002

此方法存在的问题是您必须为每个过滤器添加intersect

答案 1 :(得分:2)

Select Code
 From  Codes
 Where Year In (2009,2010,2011)
 Group By Code
 Having count(Distinct Year)=3

只应返回10001

答案 2 :(得分:2)

在您的示例中,您可以使用以下查询找到所需内容:

SELECT code
FROM codes
WHERE year IN (2009,2010)
GROUP BY code
HAVING count(*)=2;

说明:

  • 过滤至仅匹配年份
  • 按代码分组将为您提供distic代码,以及其中每个组的行数(count(*))。
  • HAVING将过滤出现2次的代码。这意味着他们必须匹配这两年。

答案 3 :(得分:0)

你的溶胶: -

SELECT代码FROM代码 年份> = 2009年和< = 2011;