-2

我正在处理EVE 静态转储和 MS SQL Server Express 中的数据。

转储包含一个表 mapDenormalize,具有名为 solarSystemID 和 typeID 的列,它们都是整数(并且都不是键)。我正在尝试使用 typeID 的各种组合查找多次出现的 solarSystemID 的值。

我有一个像这样的查询

-- all systems that have a plasma or temperate planet
select distinct D.solarSystemID, D.typeID from mapDenormalize D 
  join invTypes T on D.typeID = T.typeID 
    where T.typeName in ('Planet (Plasma)', 'Planet (Temperate)') 
    order by solarSystemID

它为每个具有等离子行星的 solarSystemID 返回 1 行,为每个具有 Temperate 行星的每个返回 1 行。我试图弄清楚如何将其用作子查询来查找具有两种行星但空手而归的 solarSystemID。

我开始认为我会做类似的事情

select solarSystemID from ( the above query ) where count(solarSystemID) > 1

但这并没有解析。什么是正确的方法?

4

2 回答 2

0
select D.solarSystemID, count(D.solarSystemID) as counts
from mapDenormalize D 
     join invTypes T 
     on D.typeID = T.typeID 
where T.typeName in ('Planet (Plasma)', 'Planet (Temperate)')
group by D.solarSystemID
having count(D.solarSystemID) > 1;

The sqlfiddle

于 2013-10-07T17:52:24.630 回答
-1

使用 AS 命名子查询,因此其中的列可以用作 COUNT 和 GROUP BY 的参数

-- all systems that have at least 1 each plasma and temperate planet
select distinct Foo.solarSystemID from 
    (select D.solarSystemID, D.typeID from mapDenormalize D join 
    invTypes T on D.typeID = T.typeID 
        where T.typeName in ('Planet (Plasma)', 'Planet (Temperate)')) 
    as Foo group by Foo.solarSystemID having COUNT(Foo.solarSystemID) > 1 

感谢@Michael 指出相关问题。

于 2013-10-07T18:08:06.817 回答