Alb*_*ert 5 mysql join query mysql-5.5
我有两张桌子
在Rank
表中,我保存了rank_id
和supervisor_id
。在Rank
表中,我存储了rank
名称。在rank_id
与supervisor_id
来自外键Rank
表。
由于我必须同时选择rank_id
和supervisor_id
从同一个表(Rank),我如何加入两个表以得到结果name
,rank name
和supervisor
?
CREATE TABLE IF NOT EXISTS `user` (
`id` int(9) NOT NULL AUTO_INCREMENT,
`Name` varchar(90) NOT NULL,
`rank_id` int(4) NOT NULL,
`supervisor_id` int(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
--
-- Dumping data for table `user`
--
INSERT INTO `user` (`id`, `Name`, `rank_id`, `supervisor_id`) VALUES
(1, 'john', 3, 2),
(2, 'james', 5, 1),
(3, 'geore', 4, 3),
(4, 'aby', 3, 2),
(5, 'john', 2, 1);
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE IF NOT EXISTS `rank` (
`id` int(9) NOT NULL AUTO_INCREMENT,
`rank_name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
--
-- Dumping data for table `rank`
--
INSERT INTO `rank` (`id`, `rank_name`) VALUES
(1, 'president'),
(2, 'vice president'),
(3, 'prime minister'),
(4, 'cabinet minister'),
(5, 'minister');
Run Code Online (Sandbox Code Playgroud)
我需要如下表所示的结果
CREATE TABLE IF NOT EXISTS `result` (
`id` int(7) NOT NULL,
`name` varchar(90) NOT NULL,
`rank` varchar(50) NOT NULL,
`supervisor` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `result`
--
INSERT INTO `result` (`id`, `name`, `rank`, `supervisor`) VALUES
(4, 'aby', 'prime minister', 'vice president');
Run Code Online (Sandbox Code Playgroud)
您必须将用户表连接到排名表两次
SELECT u.id,u.Name,r1.rank_name Rank,r2.rank_name Supervisor
FROM user u
INNER JOIN rank r1 ON u.rank_id = r1.id
INNER JOIN rank r2 ON u.supervisor_id = r2.id
WHERE u.id = 4;
Run Code Online (Sandbox Code Playgroud)
或者
SELECT u.id,u.Name,r1.rank_name Rank,r2.rank_name Supervisor
FROM user u
INNER JOIN rank r1 ON u.rank_id = r1.id
INNER JOIN rank r2 ON u.supervisor_id = r2.id
WHERE u.Name = 'aby';
Run Code Online (Sandbox Code Playgroud)
试一试 !!!
归档时间: |
|
查看次数: |
23883 次 |
最近记录: |