假设我有三个表:
用户
表:
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`loc` int(11) DEFAULT NULL,
`doc` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
位置
表:
CREATE TABLE `location` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
和文档
表:
CREATE TABLE `document` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`maintainer` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
我可以通过以下查询成功提取用户信息及其对应的location
和document
信息:
SELECT * from `user` LEFT JOIN `location` on user.loc = location.id LEFT JOIN `document` on user.doc = document.id;
location
信息很容易被引用,因为它的信息不引用任何其他表中的任何其他行。然而,document
表包含一个 maintainer
字段,它直接对应于 user
表中的另一个 user
。该字段封装了user
信息,并没有给我实际的user
数据。
是否没有一种查询表的方法,使 maintainer
的数据返回实际的 user
数据而不是 id
?
最佳答案
select
u.name as user_name,
m.name as maintainer_name,
l.name as location_name
from user as u
left outer join document as d on d.id = u.doc
left outer join user as m on m.id = d.maintainer
left outer join location as l on l.id = u.loc
关于mysql - 在 MySql 中将表连接回自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18153671/