2011-04-20 186 views
3

我有一個包含複合主鍵的表格。這是一個交叉引用表,看起來像這樣使用複合主鍵查詢表格

Table 
ID Relationship    ID2 
1  Spouse     10 
2  Employee     20 
2  Former Employee   20 
3  Former Employee   30 
4  Child     40 

我想在那裏ID2匹配編寫一個查詢,你有僱員和前僱員爲同一ID

ID Relationship    ID2 
2  Employee     20 
2  Former Employee   20  

感謝所有幫助!

+1

是否使用的是'RDBMS'? – Quassnoi 2011-04-20 15:05:33

+0

最好簡單地選擇該ID的所有記錄,並將它們在應用程序中轉換。特別是因爲您需要的列數會因每個ID而異。 – HLGEM 2011-04-20 15:05:34

回答

2

OracleSQL ServerPostgreSQL

SELECT * 
FROM (
     SELECT t.*, 
       COUNT(*) OVER (PARTITION BY id, id2) AS cnt 
     FROM mytable t 
     WHERE relationship IN ('Employee', 'Former Employee') 
     ) q 
WHERE cnt = 2 

跨平臺版本:

SELECT t.* 
FROM (
     SELECT id, id2 
     FROM mytable 
     WHERE relationship IN ('Employee', 'Former Employee') 
     GROUP BY 
       id, id2 
     HAVING COUNT(*) = 2 
     ) q 
JOIN mytable t 
ON  t.id = q.id 
     AND t.id2 = q.id2 
     AND t.relationship IN ('Employee', 'Former Employee') 
+0

感謝Quassnoi!它的Oracle和我嘗試了第二個查詢。它提取了我想要的數據,但也拉起了員工或前僱員的身份證號碼不同ID2 – Cindy 2011-04-20 15:25:10

+0

@Cindy:請您發表您的表格定義嗎? – Quassnoi 2011-04-20 15:27:39

+0

我調整了一下,並添加了T.id2 = q.id2,它現在可以工作 – Cindy 2011-04-20 15:29:16

0
select * from table where ID2 in (
    select ID2 from table where count(ID2) > 1) t 
order by ID2 
+0

這不會工作,因爲我期待過濾它只有員工和前僱員 – Cindy 2011-04-20 15:34:21