当where子句使用另一个表

时间:2018-01-28 17:21:12

标签: mysql

我有3个表,例如

card

card_id | card_name
--------------------
1       | card-1
2       | card-2
3       | card-3

deck

deck_id | deck_name
---------------------
1       | deck-1
2       | deck-2
3       | deck-3

deck_meta

meta_id | deck_id | card_id
----------------------------
1       | 2       | 1
2       | 2       | 3
3       | 1       | 1
4       | 1       | 2
5       | 2       | 2

现在,我正在尝试从表card中选择表deck_id=2 deck_meta的所有卡片。

到目前为止,我理解它需要一些关系知识来创建这样的Select查询,所以我读了一对一,一对多和多对多的关系,但无论如何查询我制作,要么丢错,要么没有给出所需的输出。 由于我无法弄清楚还有什么要寻找,我无法在SO上搜索类似的问题。

2 个答案:

答案 0 :(得分:2)

您应该将deck_meta加入card列的card_id表,然后选择deck_id = 2所在的行。

SELECT *
FROM deck_meta AS dm
INNER JOIN card AS c ON dm.card_id = c.card_id
WHERE deck_id = 2;

请参阅 DEMO

如果您只需要card_name,请将SELECT *替换为SELECT c.card_id, c.card_name

答案 1 :(得分:1)

你可以试试这个

SELECT * FROM `card` WHERE `card_id` IN (SELECT `card_id` FROM `deck_meta` WHERE `deck_id`=2)

它应该为card card_id中的行提供deck_meta属于deck_id"strict": "true" = 2行的行。