2009-12-16 63 views
1

我正在創建一個數據庫,該數據庫將包含可使用多個標籤進行標記的各種藝術家。這是一個標準的多至5月關係,我的數據庫是這樣的:藝術家標籤數據庫:獲取標籤

artist: 
ID 
name 

tag: 
ID 
name 

tagID: 
tagID 
artistID 

說我有兩個tagIDs,X和Y我想要做的是找到所有具有藝術家的標籤與標籤X和Y相同。我該怎麼做?

最終我想要這個轉變成一個界面,讓你找到一個藝術家的標籤與任意一組標籤。爲了簡化這個過程,我想過濾出不會給出任何結果的標籤組合。

+0

藝術家是否應該用X和Y標記,還是用X或Y標記? – Ray 2009-12-16 16:07:56

+0

藝術家應該被標記爲X和Y – Paul 2009-12-16 16:32:13

回答

1
SELECT T.tagID 
    FROM tagID T 
    WHERE T.artistID IN (SELECT T1.artistID 
          FROM tagID T1, 
           tagID T2, 
          WHERE T1.tagID = X AND 
           T2.artistID = T1.artistID AND 
           T2.tagID = Y) 

分享和享受。

+0

看起來很有前途,但我在理解你的代碼時遇到了一些問題。你和T和T有什麼關係? – Paul 2009-12-16 16:34:18

+0

表格的別名。外部查詢中的tagID = T1,以及子查詢中的tagID = T。它有助於說明列名稱來自哪個表的實例。 – 2009-12-16 16:38:14

+0

現在得到這個工作,這正是我需要的。非常感謝! – Paul 2009-12-16 16:59:18

0

此解決方案使用集合運算符爲具有標籤X和標籤Y的藝術家標識TagID記錄。如果您使用的數據庫風格不支持該集合運算符,則必須使用常規反而加入。

select distinct tagid 
from tagid 
where tagid not in ('X', 'Y') 
where artistid in 
     (select artistid 
      from tagid 
      where tagid = 'X' 
     intersect 
     select artistid 
      from tagid 
      where tagid = 'Y') 
/