在MySql中将表连接回自己

时间:2013-08-09 18:52:35

标签: mysql sql data-modeling

我们说我有三张桌子:

user表:

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;

location表:

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;

document表:

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;

我可以使用以下查询成功提取用户信息及其相应的locationdocument信息:

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

1 个答案:

答案 0 :(得分:2)

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