我有两个表: 状态(status_id,desc1,desc2,desc3,desc4) Status_Level(status_level_id, desc, levelD, levelS)
连接位于 Status 中的 desc1..4 字段和 Status_Level 中的 desc。 我需要选择 status_id、levelD 和 levelS,其中 levelD 和 levelS 是所有四个描述中的最高级别。
我试过这个:
SELECT Status.status_id, MAX(levelS) AS ds_column, MAX(levelD) AS ss_column
FROM Status, Status_level WHERE
Status_level.desc=Status.desc1 OR
Status_level.desc=Status.desc2 OR
Status_level.desc=Status.desc3 OR
Status_level.desc=Status.desc4
GROUP BY Status.status_id
我的 SQL 非常生疏,因此将不胜感激任何帮助。 谢谢。
编辑: 示例:
Status:
-----------------------------------------------------------
| 1 | ABC_LEVEL_1 | DEF_LEVEL_5| CBA_LEVEL_2 | ABC_LEVEL_4|
-----------------------------------------------------------
| 2 | ABC_LEVEL_1 | DEF_LEVEL_1| CBA_LEVEL_2 | ABC_LEVEL_1|
-----------------------------------------------------------
| 3 | ABC_LEVEL_4 | DEF_LEVEL_1| CBA_LEVEL_2 | ABC_LEVEL_4|
-----------------------------------------------------------
Status_Level:
---------------------------
| 1 | ABC_LEVEL_1 | 1 | 7 |
---------------------------
| 1 | DEF_LEVEL_5 | 5 | 6 |
---------------------------
| 1 | CBA_LEVEL_2 | 2 | 3 |
---------------------------
| 1 | ABC_LEVEL_4 | 4 | 5 |
---------------------------
| 1 | DEF_LEVEL_1 | 1 | 2 |
Desired output:
-------------
| 1 | 5 | 7 | <- 5 from DEF_LEVEL_5 and 7 from ABC_LEVEL_1
-------------
| 2 | 2 | 7 | <- 2 from CBA_LEVEL_2 and 7 from ABC_LEVEL_1
-------------
| 3 | 4 | 5 | <- 4 from ABC_LEVEL_4 and 5 from ABC_LEVEL_4
-------------
最佳答案
如果你能创造these功能,那么你可以这样做:
SELECT Status.status_id,
MaxOfList(l1.levelD,l2.levelD,l3.levelD,l4.levelD) AS ds_column,
MaxOfList(l1.levelS,l2.levelS,l3.levelS,l4.levelS) AS ss_column
FROM Status s, Status_level l1, Status_level l2, Status_level l3, Status_level l4
WHERE l1.desc=s.desc1 AND l2.desc=s.desc2
AND l3.desc=s.desc3 AND l4.desc=s.desc4;
请注意,我假设 desc1-4 中不允许 null
关于sql - 大丑陋的SQL查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4440204/