2014-03-05 32 views
0

海蘭所有,SQL SELECT throught連接表

我需要寫一個選擇一點幫助......問題如下:

我有以下表格:

 
help 
+----+-------+---------+ 
| id | title | content | 
+----+-------+---------+ 
| 1 | a  | acont | 
| 2 | b  | bcont | 
+----+-------+---------+ 

helptag 
+----+------+ 
| id | name | 
+----+------+ 
| 1 | atag | 
| 2 | btag | 
+----+------+ 

helphelptag(join table) 
+--------+-----------+ 
| helpid | helptagid | 
+--------+-----------+ 
| 1  | 1   | 
| 1  | 2   | 
| 2  | 2   | 
+--------+-----------+ 

我需要選擇那些幫助,有我給的ID。 因此,舉例來說,如果我給TAG_ID 2比都幫助1和2 ,但如果我給TAG_ID 1和2,不僅僅是幫助1.

我試過leftjoin,在[tag_ids]的ID,但它給回兩個幫助,如果我給1和2.

+0

可能是你應該嘗試把更多的數據!並標記您正在使用的相關_RDBMS_! –

回答

0

這是「set-set-sets」查詢的一個例子。我喜歡使用聚合和having子句來解決此問題。關於第一個問題:

select helpid 
from helphelptag 
group by helpid 
having sum(case when helptagid = 2 then 1 else 0 end) > 0; 

對於第二個,只是添加另一個條件:

having sum(case when helptagid = 2 then 1 else 0 end) > 0 and 
     sum(case when helptagid = 1 then 1 else 0 end) > 0; 

每個條件計算符合給定條件的行數。