比较sql中的两个或多个值

时间:2014-05-29 13:32:53

标签: mysql sql vertica relational-division

我有一张表有以下内容。

 fieldmapid | fieldid
------------+---------
       2010 |     180
       2012 |      90
       2012 |      92
       2020 |      90
       2020 |      92
       2020 |      95
       20005 |      90
       20005 |      92

我想编写一个查询,首先获取fieldmapid的fieldid(假设它是2012)。然后我想选择与2012年具有相同fieldid的fieldmapid。这意味着,我需要只有90和92作为其fieldid的fieldmapid,而不需要其他任何东西。所以我想要20005和2012作为查询的输出。因为这是仅有的两个fieldmapid,它们只有90和92作为其fieldid。

2 个答案:

答案 0 :(得分:1)

试试这个。可能会帮到你。

select f.fieldmapid from Field f
LEFT JOIN Field f1 on f1.fieldid=f.fieldid and 

 (f1.fieldmapid=2012) 
group by f.fieldmapid
having 
count(f.fieldmapid)=count(f1.fieldmapid);

演示链接:http://sqlfiddle.com/#!2/b72e05/3

答案 1 :(得分:0)

这是“set-within-sets”子查询的示例。您可以通过执行以下操作来解决此问题:

select t.fieldmapids
from table t left outer join
     (select fieldid
      from table t2
      where fieldmapid = 2012
     ) f2012
     on f2012.fieldmapid = t.fieldmapid
group by t.fieldmapids
having count(*) = count(f2012.fieldmapid) and
       count(*) = (select count(*) from table t2 where fieldmapid = 2012);

having子句中的第一个条件检查给定fieldmapid的所有字段是否与2012年的至少一个字段匹配。第二个条件验证fieldmapid上的字段数是否匹配2012年的数字。