我有一张表有以下内容。
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。
答案 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);
答案 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年的数字。