【发布时间】:2016-12-22 11:36:04
【问题描述】:
我有一个表格用户和一个表格任务。任务按重要性排序并分配给用户的任务列表。任务有一个状态:就绪或未就绪。现在,我想列出所有用户以及他们最重要的任务也已准备就绪。
有趣的需求是每个用户的任务首先需要过滤和排序,然后应该选择最重要的一个。这是我想出的:
SELECT Users.name,
(SELECT *
FROM (SELECT Tasks.description
FROM Tasks
WHERE Tasks.taskListCode = Users.taskListCode AND Tasks.isReady
ORDER BY Tasks.importance DESC)
WHERE rownum = 1
) AS nextTask
FROM Users
但是,这会导致错误
ORA-00904: "Users"."taskListCode": invalid identifier
我认为原因是oracle does not support correlating subqueries with more than one level of depth。但是,我需要两个级别才能执行WHERE rownum = 1。
我也试过没有相关子查询:
SELECT Users.name, Task.description
FROM Users
LEFT JOIN Tasks nextTask ON
nextTask.taskListCode = Users.taskListCode AND
nextTask.importance = MAX(
SELECT tasks.importance
FROM tasks
WHERE tasks.isReady
GROUP BY tasks.id
)
这会导致错误
ORA-00934: group function is not allowed here
我将如何解决这个问题?
【问题讨论】:
-
WHERE task.isready是什么意思? Oracle 数据库中没有布尔值。
标签: sql oracle oracle11g subquery correlated-subquery