如何使用MySQL将多个表连接在一起?我有3个单独的表。
项目
ID Project Name
1 Big Project #1
项目合同经理
ID Project Id Contract Manager Id
1 1 11
合同经理
ID Name
11 John Smith
26 Bill Smith
我想加入上面的3个表格,以获得项目列表以及合同经理名称。
答案 0 :(得分:2)
只有两个INNER JOIN
似乎就足够了:
SELECT *
FROM `Projects Contract Managers` pcm
JOIN `Contract Managers` cm ON pcm.`Contract Manager Id` = cm.`ID`
JOIN `Projects` p ON pcm.`Project Id` = p.`ID`
答案 1 :(得分:0)
第一个建议的另一个可能性我总觉得读起来更好。我认为引擎会针对相同的执行计划进行优化。您可以使用EXPLAIN确认表是否很大并且您担心性能。
SELECT *
FROM `Projects Contract Managers` a,
`Contract Managers` b,
`Projects` c
WHERE a.`Contract Manager Id` = b.`ID`
a.`Project Id` = c.`ID`
答案 2 :(得分:0)
根据您所拥有的,我假设项目可以有多个承包商,承包商可以是多个项目的一部分,请记住,这里是创建表的mysql代码:
CREATE TABLE `projects` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`project` VARCHAR(60) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
CREATE TABLE `contractors` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(60) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
CREATE TABLE `project_contractors` (
`pid` INT(11) DEFAULT NULL,
`cid` INT(11) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=latin1
以下是使用join返回所有记录的查询:
SELECT *
FROM projects AS p
JOIN project_contractors AS pc
ON p.id = pc.pid
JOIN contractors AS c
ON pc.cid = c.id;
如果您愿意,您可能需要添加一些where子句和order by,但是如果您想要返回所有将执行此操作的内容。
以下是project_contractors表的一些内容:
pid cid
1 2
1 1
2 3
3 4
承包商表:
id NAME
1 john
2 mike
3 dave
4 steve
项目表的:
id project
1 FIRST project
2 SECOND project
3 third project
以及查询结果:
id project pid cid id NAME
1 FIRST project 1 2 2 mike
1 FIRST project 1 1 1 john
2 SECOND project 2 3 3 dave
3 third project 3 4 4 steve
我认为这将涵盖你所寻找的东西,祝你好运!