1

我有两个表:项目和任务。一个项目由任务组成。我想创建一个视图,其中列出了所有项目以及与项目相关的任务数量。这是我尝试过的:

    SELECT 
   "PROJECTS"."P_ID" "P_ID", 
  (
    SELECT
        COUNT(*)
    FROM
       "TASKS"
    WHERE 
      "TASKS"."PROJECT" = "PROJECTS"."P_ID"
 ) AS "Amount of Tasks" 
 FROM
     "PROJECTS", "TASKS"

 WHERE "TASKS"."PROJECT"="PROJECTS"."P_ID"

不幸的是,它会多次返回一个项目,具体取决于他们拥有的任务数量。例如,项目 1 有 3 个任务,因此它在 tableview 中显示了 3 次。我怎样才能防止这种情况?我尝试在第一次选择后添加 distinct,但出现此错误:

ORA-01791: not a SELECTed expression

任何帮助表示赞赏!

4

1 回答 1

6

您通常希望加入这两个表并执行GROUP BY. 就像是

SELECT p_id, count(*)
  FROM projects,
       tasks
 WHERE tasks.project = projects.p_id
 GROUP BY p_id

如果您真的想使用标量子查询方法(这会降低效率),您可以执行类似的操作

SELECT p_id,
       (SELECT COUNT(*)
          FROM tasks
         WHERE tasks.project = projects.p_id)
  FROM projects
于 2012-06-28T16:37:33.213 回答