2016-02-04 33 views
0

我有標準標記模型使用三個表的方法... Object,ObjectTag,Tag。所以一個對象可以有多個標籤。用於檢索標記的SQL查詢從

現在,說我有一個查詢,從給定的標籤=「HTML」選擇對象:

SELECT o.* 
FROM Object o 
INNER JOIN ObjectTag ot ON ot.objectId = o.Id 
INNER JOIN Tag t ON t.id = ot.tagId 
WHERE t.name = 'html' 
ORDER BY o.Id 

那麼,如何可以使用此查詢或結果得到相關的標記。含義我想要獲取每個對象所關聯的所有其他標籤。所以,想象一下我從上面的查詢結果如下:

Object 1 ---> [html, apple] 
Object 2 ---> [html, web, standard] 
Object 3 ---> [html, coding] 

所以我想在此查詢對象的所有其他標籤:

[apple, web, standard, coding] 

我似乎無法讓我的頭在這附近。

+0

爲什麼不只是刪除'WHERE t.name ='html''子句,以便獲得所有標記而不是僅僅'html'? – vmachan

+0

這是因爲我需要得到與'html'相關的其他標籤,這意味着其他對象具有HTML和任何其他標籤... –

回答

0
select distinct t.name 
from ObjectTag ot join 
    tags t 
    on ot.tagId = t.id 
where exists (select 1 
       from ObjectTag ot2 join 
        Tags t2 
        on ot2.tagid = t2.id 
       where ot.objectId = ot2.objectId and 
        t2.name = 'html' and t2.name <> t.name 
      ) ; 
+0

謝謝,這似乎是工作...我仍在測試它,並將採取公認。 –