在m:n关系中使用MYSQL仅选择具有3个表的特定关系的记录

时间:2012-10-09 16:13:05

标签: mysql select

我有3张桌子:

t_cards:

----------------------------
| card_id | customer_name |  
----------------------------  

t_cardsxtags:

-------------------------
| ID | card_id | tag_id |  
------------------------- 

t_tags:

---------------------
| tag_id | tag_name |  
--------------------- 

卡和标签之间的关系是m:n,因此卡可以有多个标签,标签可以属于多个卡。

现在我的问题如下:
我想从t_cards中选择那些具有某些标签(或更多)的记录,例如带有tag_ids 33,44和55的标签。
所以我希望所有这些卡片都包含在选择中:

  • 只有那些标签的卡片
  • 带有这些标签的卡片还有其他附加标签

我如何使用mysql做到这一点? 的 [编辑]
更具体一点:我想要那些选择的,有标签33,44和55(可能还有一些额外的标签)

2 个答案:

答案 0 :(得分:0)

这是你在找什么?

SELECT * FROM t_cards c INNER JOIN t_cardsxtags ct ON c.card_id = ct.card_id WHERE ct.tag_id IN (33,44,55);

答案 1 :(得分:0)

你是说这个?

SELECT
  t1.*
FROM
  t_cards t1
  INNER JOIN t_cardsxtags t2 ON t2.card_id=t1.card_id
WHERE t2.tag_id IN (33,44,55)
GROUP BY t1.card_id
HAVING (COUNT(t2.tag_id) == 3)

3是标签数量