2013-10-07 75 views
-2

我正在使用EVE static dump和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 

返回1行中,有一個等離子地球和1行的每一個溫和的行星每solarSystemID查詢。我試圖找出如何使用這個作爲子查詢來查找具有兩種種行星的太陽系統ID,但都是空手而來的。

我開始想,我會做類似

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

但這並不解析。什麼是正確的方法?

+0

可能的重複[如何刪除重複行?](http://stackoverflow.com/questions/18932/how-can-i-remove-duplicate-rows) – Michael

+1

@邁克爾是正確的,在他的答案鏈接包含關鍵字:用「AS」命名子查詢,以便可以命名子查詢中的列。 – wades

回答

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

-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 

感謝@邁克爾您指出相關問題。

+0

這不適用於「有兩個」的情況。 – Kaf