2012-07-07 64 views
1

我有2张桌子。如何多连接表?

工人和经验

在表的工人有一行worker_parent(因为一个工人可以负责其他)。

不,我必须连接的表像:

SELECT w1.* FROM workers w1 LEFT JOIN workers w2 ON (w2.id = w1.worker_parent) 

这是很正常的。但是我必须以w2的经验排序,我尝试添加表体验,但是它连接到w1而不是w2。

我的问题是如何将表体验(其中有行worker_id)添加到w2中,并通过经验和从w1中选择数据进行排序。

这是我的尝试。

SELECT w1.* FROM workers w1 LEFT JOIN workers w2 ON (w2.id = w1.worker_parent) LEFT JOIN experience e ON (w2.id = e.worker_id) ORDER BY e.experience DESC 

感谢对帮助

+0

和什么是错丝毫查询?它的排序工作者由父母经验丰富,如果他们有父母 – 2012-07-07 08:17:06

+1

虽然你没有显示任何来自'W2'和'experience'表的数据,你的SQL似乎是非常正确的。这意味着,如果'W2'中的'W1'有多行并且'experience'中的'W2'类似,那么您的输出中'W1'中的每行都将有多行。要了解除了'W1'列以外,还需要显示'W2'和'Experience'的一些列。 – somnath 2012-07-07 08:22:44

+0

@somnath - 我只需要w1的数据。 – CroiOS 2012-07-07 08:25:25

回答

1

如果只想有一个父与经验将童工, 你需要添加一个地方(或更改连接类型) (为便于阅读,我改名W1和W2 w_child和w_parent)

SELECT w_child.*, e_parent.experience 
FROM workers AS w_child 
LEFT JOIN workers AS w_parent ON (w_parent.id = w_child.worker_parent) 
LEFT JOIN experience AS e_parent ON (w_parent.id = e_parent.worker_id) 
WHERE e_parent.worker_id IS NOT NULL 
ORDER BY e_parent.experience DESC 
+0

就是这样,tnx。 – CroiOS 2012-07-07 08:48:52