从表中提取子数据

时间:2015-11-03 21:07:41

标签: sql select join

我很乐意为你提供帮助。

我有一张这样的表:

[MS_CODE] [MS_SML] 
1            43
1            AA
2            51
3            24
3            21
4            11
4            43
5            AA
6            11

我想编写一个查询来搜索[MS_SML],该查询显示在[MS_Code]的组(1或2或3)和(4或5或6)中。

例如:

43,AA因为43是连续的,其中ms_code是1和4,并且对于' AA'是相同的。我想创建这样的输出:

[MS_Code] [MS_SML]
1            43
4            43
1            AA
5            AA

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

一种方法是使用exists并应用您的条件:

select t.*
from t
where exists (select 1
              from t t2
              where t2.ms_sml = t1.ms_sml and t2.ms_code in (1, 2, 3)
             ) and
      exists (select 1
              from t t2
              where t2.ms_sml = t1.ms_sml and t2.ms_code in (4, 5, 6)
             );

答案 1 :(得分:0)

这是一种方法。

select ms_code, ms_sml
from msc
where ms_sml in
(
  select ms_sml
  from msc 
  where ms_code in (1,2,3)
  intersect
  select ms_sml
  from msc 
  where ms_code in (4,5,6)
)
order by ms_sml, ms_code

注意:如果同一组中给定ms_sml有多个ms_code,则会返回所有这些ms_code。 假设AA映射到1,3和5,这将返回

1  AA
3  AA
5  AA

如果这是一个问题,我们可能需要额外的逻辑来处理:例如,在组内选择ms_code的最小值。