MySQL join 与关系表上的匹配
Posted
技术标签:
【中文标题】MySQL join 与关系表上的匹配【英文标题】:MySQL join with match on relational table 【发布时间】:2014-02-28 00:23:23 【问题描述】:我正在处理一个包含多个表的 mysql 数据库模式,我想知道是否可以提交 1 个查询来获取我需要的所有数据。我遇到的一个问题是有一个表将键 id 引用到另一个表。比如——
表1:
________________________
| id | profession |
+---------+-------------+
| 1 | stockbroker |
| 2 | doctor |
| ... | ... |
表2:
____________________________
| id | rehab |
+------------+-------------+
| 1 | meth-head |
| 2 | alcoholic |
表3:
__________________________
| table1_id | table2_id |
+------------+------------+
| 1 | 2 |
如果我只知道Table1.key_id,是否可以从Table2中获取key_id值?
类似于 -
SELECT table2.value1 FROM Table1, Table2, Table3 WHERE (the Table3中table1_id对应的table2_id值)
非常感谢任何帮助。
谢谢!
【问题讨论】:
澄清一下:Table1 和 Table2,如您所展示的,是否各有三行?您的所有表是否都有两列,一列名为“name”,另一列名为“value”?给定你的样本数据,你能提供一个样本结果集吗? 我更新了表格以显示我认为对您更有意义的格式(并且可能是正确的格式)。 【参考方案1】:如果我正确阅读了您的问题,看起来Table3
是一个数据透视表,因此表 1 和表 2 具有多对多关系。您必须从Table1
加入Table3
,然后再返回Table2
。
SELECT t2.value1, t2.value2
FROM Table1 t1
INNER JOIN Table3 t3 ON t1.key_id = t3.table1_id
INNER JOIN Table2 t2 ON t3.table2_id = t2.key_id
WHERE t1.key_id = [your value]
请记住,这可能会为 Table1 中的每个值生成多个 Table2 值,反之亦然。
【讨论】:
【参考方案2】:您没有提供太多信息,但是,
SELECT t2.value1
FROM table2 AS t2, table1 AS t1, table3 AS t3
WHERE t1.key_id = 1
AND t1.key_id = t3.table1_id AND t3.table2_id = t2.key_id;
适用于那个有限的例子。
http://sqlfiddle.com/#!2/9cf42/5
【讨论】:
以上是关于MySQL join 与关系表上的匹配的主要内容,如果未能解决你的问题,请参考以下文章