Mysql查询两个表与引用表连接
嗨,我有两张这样的桌子: 表1:Mysql查询两个表与引用表连接,mysql,sql,join,correlated-subquery,Mysql,Sql,Join,Correlated Subquery,嗨,我有两张这样的桌子: 表1: name | distro1 | distro2 | distro3 ---------------------------------- foo | 001 | 002 | 003 表2: id | distro --------------- 001 | slackware 002 | redhat 003 | debian 我希望得到如下选择结果= name | dis1 | dis2 | dis3 --------
name | distro1 | distro2 | distro3
----------------------------------
foo | 001 | 002 | 003
表2:
id | distro
---------------
001 | slackware
002 | redhat
003 | debian
我希望得到如下选择结果=
name | dis1 | dis2 | dis3
----------------------------------
foo | slackware | redhat | debian
创建这些源表所需的查询
CREATE TABLE IF NOT EXISTS `table1` (
`name` varchar(30) NOT NULL,
`distro1` varchar(30) NOT NULL,
`distro2` varchar(30) NOT NULL,
`distro3` varchar(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `table1` (`name`, `distro1`, `distro2`, `distro3`) VALUES
('foo', '001', '002', '003');
CREATE TABLE IF NOT EXISTS `table2` (
`id` varchar(30) NOT NULL,
`distro` varchar(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `table2` (`id`, `distro`) VALUES
('001', 'slackware'),
('002', 'readhat'),
('003', 'debian');
你可以有这样的东西: 通过使用
内部联接
,假定所有发行版都有值,并且在表2中有相应的匹配项
SELECT a.Name,
b.distro Distro1,
c.distro Distro2,
d.distro Distro3
FROM myTableA a
INNER JOIN myTableB b
on a.distro1 = b.id
INNER JOIN myTableB c
on a.distro2 = c.id
INNER JOIN myTableB d
on a.distro3 = d.id
更新1
SELECT a.Name,
b.distro Distro1,
c.distro Distro2,
d.distro Distro3
FROM myTableA a
LEFT JOIN myTableB b
on a.distro1 = b.id
LEFT JOIN myTableB c
on a.distro2 = c.id
LEFT JOIN myTableB d
on a.distro3 = d.id
你可以有这样的东西: 通过使用
内部联接
,假定所有发行版都有值,并且在表2中有相应的匹配项
SELECT a.Name,
b.distro Distro1,
c.distro Distro2,
d.distro Distro3
FROM myTableA a
INNER JOIN myTableB b
on a.distro1 = b.id
INNER JOIN myTableB c
on a.distro2 = c.id
INNER JOIN myTableB d
on a.distro3 = d.id
更新1
SELECT a.Name,
b.distro Distro1,
c.distro Distro2,
d.distro Distro3
FROM myTableA a
LEFT JOIN myTableB b
on a.distro1 = b.id
LEFT JOIN myTableB c
on a.distro2 = c.id
LEFT JOIN myTableB d
on a.distro3 = d.id
你可能想加入左键。不清楚是否每一行都有一个匹配的行用于每个发行版。我假设每个发行版都有一个对应的匹配到另一个表。但我仍将编辑我的答案。您可能希望左键加入。不清楚是否每一行都有一个匹配的行用于每个发行版。我假设每个发行版都有一个对应的匹配到另一个表。但我仍将编辑我的答案。请参阅规范化。如果有第四个发行版规范化,会发生什么。如果有第四个发行版会发生什么