-1

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

所以数据表可能包含orgcode 123

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

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

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

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

谢谢

4

3 回答 3

0

尝试使用这样的别名:

SELECT tb1.orgcode, tb2.orgcode
FROM orgtable AS tb1 LEFT OUTER JOIN orgtable AS tb2 ON tb1.orgcode = tb2.orgcode
于 2013-04-16T07:49:14.653 回答
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
于 2013-04-16T07:56:46.030 回答
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,直到没有父级。为此,您将需要递归存储过程、循环存储过程或嵌套树(请参阅链接)

于 2013-04-16T07:48:21.197 回答