使用前一个JOIN中的数据在同一个表上进行多个LEFT JOINS

时间:2013-04-16 07:43:55

标签: mysql

我在mysql中使用LEFT JOIN从我的数据集中的代码中查找组织。

因此 数据表 可能包含 orgcode 123

然后 orgtable 包含组织的 orgname ,即“本地书店”。

然而, orgtable 还包含另一个代码,该代码使用其他代码(即 456 )标识“本地书店”的父组织。

如何编写转到 orgtable 的查询,查找 orgname ,同时找到 parentorgcode 然后在同一个表中查找以查找父组织名称?

基本上使用一个LEFT JOIN的输出在同一查询中生成另一个LEFT JOIN ......

由于

3 个答案:

答案 0 :(得分:0)

首先,如果您正在管理数据层次结构,我强烈建议您阅读http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/,因为它会向您展示存储它的各种方法,这可能会让您使用比目前更优化的方法。

其次,您可以根据要求轻松地进行LEFT JOIN,但只需要确保每个新连接都使用别名,这样就不会对您请求的字段产生歧义,即

SELECT 
    *
FROM datatable AS d
LEFT JOIN orgtable AS o1 ON o1.orgID = d.orgID
LEFT JOIN orgtable AS o2 ON o2.orgID = o1.parentOrgID

你不能做的是自动让MySQL继续添加LEFT JOIN&s;直到没有父级。为此,您将需要递归存储过程,循环存储过程或嵌套树(请参阅链接)

答案 1 :(得分:0)

尝试使用这样的别名:

SELECT tb1.orgcode, tb2.orgcode
FROM orgtable AS tb1 LEFT OUTER JOIN orgtable AS tb2 ON tb1.orgcode = tb2.orgcode

答案 2 :(得分:0)

 SELECT O1.NAME AS ORG_NAME, O2.NAME AS PARENT_ORG_NAME
 FROM DATATABLE D
 JOIN ORGANISTION O1
 ON D.ORGID = O1.ORG_ID
 LEFT JOIN ORGANISTION O2
 ON O1.PARENT_ID = O2.ID