2014-03-05 28 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; 

每个条件计算符合给定条件的行数。