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 与关系表上的匹配的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 一个表上的行删除不会更新另一表的关系

与关联对象在同一张表上的多对多关系

事务隔离级别与表上的锁的关系

Laravel HasManyThrough 与相关表上的 Where 条件的关系

SQL - 连接表上的查询

MySQL JOIN 语法说明与 图解