我在mysql中使用LEFT JOIN从我的数据集中的代码中查找组织。
因此 数据表 可能包含 orgcode 123
然后 orgtable 包含组织的 orgname ,即“本地书店”。
然而, orgtable 还包含另一个代码,该代码使用其他代码(即 456 )标识“本地书店”的父组织。
如何编写转到 orgtable 的查询,查找 orgname ,同时找到 parentorgcode 然后在同一个表中查找以查找父组织名称?
基本上使用一个LEFT JOIN的输出在同一查询中生成另一个LEFT JOIN ......
由于
答案 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