1

プロジェクトとタスクの 2 つのテーブルがあります。プロジェクトはタスクで構成されます。プロジェクトに関連するすべてのプロジェクトがタスクの量とともに一覧表示されるビューを作成したいと考えています。これは私が試したことです:

    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 つのタスクがあるため、テーブルビューに 3 回表示されます。どうすればそれを防ぐことができますか? 最初の選択後に個別に追加しようとしましたが、次のエラーが発生しました:

ORA-01791: not a SELECTed expression

どんな助けでも大歓迎です!

4

1 に答える 1

6

通常、2 つのテーブルを結合して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 に答える