0

你好伟大的开发者!

我有一个与 MySQL 中的子父字段相关的问题。在这里,我在SQL Fiddle中创建了一个模式。

我有 2 张桌子。

sys_user 表

| username | userDisplayName | userTypeCode |
|----------|-----------------|--------------|
|    adhan |           Adhan |         ENTL |
|    aruto |           Aruto |         RWTL |
|    berry |           Berry |         EDTL |
|   chiira |          Chiira |         QCED |

sys_usertype 表

| userTypeCode |       userTypeName | userTypeCodeParent | userTypeLevel |
|--------------|--------------------|--------------------|---------------|
|         EDTL |  Editor Translator |               MSTL |             2 |
|         ENTL | English Translator |               RWTL |             3 |
|         MSTL |         Translator |                    |             1 |
|         QCED |    Quality Checker |                    |             1 |
|         RWTL |     Raw Translator |               MSTL |             2 |

所以,我试过这个查询:

SELECT usr.*, 
  usrty_lv1.userTypeName AS userTypeLevel1 ,
  usrty_lv2.userTypeName AS userTypeLevel2, 
  usrty.userTypeName AS userTypeLevel3 
FROM sys_user usr
LEFT JOIN sys_usertype usrty 
  ON usr.userTypeCode = usrty.userTypeCode
LEFT JOIN sys_usertype usrty_lv2 
  ON usrty.userTypeCodeParent = usrty_lv2.userTypeCode
LEFT JOIN sys_usertype usrty_lv1 
  ON usrty_lv2.userTypeCodeParent = usrty_lv1.userTypeCode

结果是:

====================================================================================================
|  username  | userDisplayName | userTypeCode | userTypeLevel1 | userTypeLevel2 |  userTypeLevel3  |
====================================================================================================
| chiira     | Chiira          | QCED         | (null)         | (null)         | Quality Checker  |
| adhan      | Adhan           | ENTL         | Translator     | Raw Translator | English Transl.. |
| berry      | Berry           | EDTL         | (null)         | Translator     | Editor Transla.. |
| aruto      | Aruto           | RWTL         | (null)         | Translator     | Raw TransLator   |
====================================================================================================

我的目标是产生这个结果:

====================================================================================================
|  username  | userDisplayName | userTypeCode | userTypeLevel1 | userTypeLevel2 |  userTypeLevel3  |
====================================================================================================
| chiira     | Chiira          | QCED         | Quality Chec.. | (null)         | (null)           |
| adhan      | Adhan           | ENTL         | Translator     | Raw Translator | English Transl.. |
| berry      | Berry           | EDTL         | Translator     | Editor Trans.. | (null)           |
| aruto      | Aruto           | RWTL         | Translator     | Raw TransLator | (null)           |
====================================================================================================

如何做到这一点?我做错了吗?我不喜欢使用 CTE,因为我有很多数据 :(

太感谢了。

4

0 回答 0