0

我有 3 张桌子:

卡片:

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

t_cardsx标签:

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

t_tags:

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

卡片和标签之间的关系是m:n,所以一张卡片可以有多个标签,一个标签可以属于多张卡片。

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

  • 具有且仅具有这些标签的卡片
  • 带有其他附加标签的标签的卡片

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

4

2 回答 2

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);
于 2012-10-09T16:18:47.613 回答
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是标签的数量

于 2012-10-09T16:22:45.433 回答