【发布时间】:2019-12-19 03:36:25
【问题描述】:
用户需要输入 APP_ID,但可选择输入 MILESTONE_ID 和 TASK_ID。如果 MILESTONE_ID 只是输入,则应该是里程碑才不包含任务。
例如。 APP_ID: 1 MILESTONE_ID:341 TASK_ID: (空白) = 输出应该是 app_id 和里程碑。
当 APP_ID: 1 MILESTONE_ID: (空白) TASK_ID: 441 = 输出应该只是 app_id 和任务。
最后当用户输入一个 APP_ID: 1, MILESTONE_ID:341, TASK_ID: 441 = 输出应该是 app_id, 任务和里程碑。
我当前的查询如下:
SELECT APPLICATION, MILESTONE_NAME, TASK_NAME, FIELD_NAME, FIELD_ALIAS
FROM TBL_APPLICATIONS A
INNER JOIN TBL_WORKFLOWS B ON B.APPLICATION_FK = A.APPLICATION_PK
INNER JOIN TBL_WORKFLOW_DEFINITION C ON C.WORKFLOW_FK = B.WORKFLOW_PK
INNER JOIN TBL_MILESTONE D ON D.MILESTONE_PK = C.START_MILESTONE_FK OR D.MILESTONE_PK = C.END_MILESTONE_FK
INNER JOIN TBL_TASK_FOR_MILESTONE E ON E.MILESTONE_FK = D.MILESTONE_PK
INNER JOIN TBL_TASK F ON F.TASK_PK = E.TASK_FK strong text
INNER JOIN TBL_REQ_FOR_TASK G ON G.TASK_FK = F.TASK_PK
INNER JOIN TBL_TASK_REQUIREMENTS H ON H.TASK_REQUIREMENT_PK = G.TASK_REQUIREMENT_FK
WHERE APPLICATION_PK = :APPLICATION_ID
OR MILESTONE_PK = :MILESTONE_ID
OR TASK_PK = :TASK_ID
输出如下所示。
【问题讨论】:
-
您不能在 SQL 中动态更改
SELECT列表。如果您使用 PHP 或 Python 等编程语言进行查询,则可以动态构建它。 -
两张图片之间应该有区别吗?
-
@APC 甲骨文先生
-
@Barmar 我也在想同样的事情。但这正是我老板想要的。 :(
-
@Barmar 不,它们是一样的。不小心重复了。