2012-09-12 72 views
0

對不起,很難提出一個描述性標題。數據庫邏輯,用重複值查詢表格

我有一個兩列表複合關鍵字 - > ID和屬性。 因此,ID可能會在表格中出現兩次,但每個實例具有不同的屬性。

id attribute 
1  1 
1  2 
2  2 
3  1 

我的問題是關於如何查詢這個。比如我要找到匹配的兩個屬性

SELECT a.id 
FROM table AS a, table AS b 
WHERE a.attribute = 1 
AND b.attribute = 2 
AND a.id = b.id 

所有的ID,以便該查詢應該只返回ID爲1

,因爲我需要知道有多少屬性會尋找未來這是非常剛性的時間,儘管動態創建SQL可能是可能的。

有沒有更好的方式來查詢這樣的表格?首先有沒有更好的方式來組織這張桌子?

感謝您的任何幫助。

+1

你用什麼DBMS? – Vikdor

回答

2
SELECT id 
FROM table 
WHERE attribute in (1,2) 
group by id 
having count(id) = 2 

這假設相同屬性只能恰好一次分配一個ID(組合ID /屬性是唯一的)

SQLFiddle example

0

你可以做一個工作臺旋轉和創建數據的平面視圖,如下所示。缺點是您必須對結果中的列數施加固定限制。這裏有一個例子:

create view flat_attributes 
as 
select id , 
     attr_1 = t1.attribute , 
     attr_2 = t2.attribute , 
     attr_3 = t3.attribute , 
     ... 
     attr_N = tN.attribute 
from (select distinct 
       id 
     from attributes 
    ) t 
left join attributes t1 on t1.id = t.id and t1.attribute = 1 
left join attributes t2 on t2.id = t.id and t1.attribute = 2 
left join attributes t3 on t3.id = t.id and t1.attribute = 3 
... 
left join attributes tN on tN.id = t.id and tN.attribute = N 

任何attr列,它是非零意味着問題的id有屬性。它應該簡化查詢。