2

おそらく本当にばかげた問題が1つだけありますが、これを解決することはできません。

私は現在3つのテーブルを持っています:

PROJECT    
PROJECT_CATEGORY     
CATEGORY

現在PROJECT_CATEGORYは中間テーブルであるため、from PROJECTCATEGORYlike pID、およびの主キーのみが含まれていますcID

pIDinテーブルがある場合にクエリを作成する方法は知っていますCATEGORYが、この場合は中間テーブルしかありません。では、これら3つのテーブルをチェックするクエリを作成して、すべてのカテゴリとそれらが割り当てられているプロジェクトを表示するにはどうすればよいでしょうか。

4

2 に答える 2

7
select c.*, p.* 
from categories c
inner join PROJECT_CATEGORY pc on pc.category_id = c.id
inner join projects p on pc.project_id = p.id
于 2012-04-29T14:10:43.860 に答える
2

私が正しく理解していれば、カテゴリにプロジェクトがあるかどうかを調べたいと思います。次のクエリは、特定のカテゴリに関連付けられているプロジェクトの数を示しています。

すべてのカテゴリに関連付けられているすべてのプロジェクトのリストが必要な場合は、2番目のクエリを使用できます。カテゴリ4INNER JOINは、このカテゴリに関連付けられたプロジェクトがないため、2番目の結果には表示されません。カテゴリ4を表示する場合は、に変更INNER JOINする必要がありますLEFT OUTER JOIN

SQL Fiddleでデモを表示するには、ここをクリックしてください。

スクリプト

CREATE TABLE project 
(
  projectid INT NOT NULL 
  , projectname VARCHAR(20) NOT NULL
);

CREATE TABLE projectcategory
(
    projectid   INT NOT NULL 
  , categoryid  INT NOT NULL
);

CREATE TABLE category
(
    categoryid      INT NOT NULL
  , categoryname    VARCHAR(20) NOT NULL
);

INSERT INTO project (projectid, projectname) VALUES 
    (1, 'project 1'),
    (2, 'project 2'),
    (3, 'project 3');

INSERT INTO category (categoryid, categoryname) VALUES 
    (1, 'category 1'),
    (2, 'category 2'),
    (3, 'category 3'),
    (4, 'category 4');

INSERT INTO projectcategory (projectid, categoryid) VALUES 
    (1, 1),
    (3, 2),
    (2, 1),
    (2, 2),
    (2, 3),
    (2, 2);

SELECT          c.categoryid
            ,   c.categoryname
            ,   COUNT(pc.categoryid) Number_Of_Projects
FROM            category c 
left outer join projectcategory pc 
on              pc.categoryid = c.categoryid
GROUP BY        c.categoryid
ORDER BY        c.categoryname;

SELECT          c.categoryid
            ,   c.categoryname
            ,   p.projectid
            ,   p.projectname
FROM            category c 
inner join      projectcategory pc 
on              pc.categoryid = c.categoryid
inner join      project p
on              p.projectid = pc.projectid
ORDER BY        c.categoryname;

出力

CATEGORYID CATEGORYNAME NUMBER_OF_PROJECTS
---------- ------------ ------------------
1          category 1           2
2          category 2           3
3          category 3           1
4          category 4           0

CATEGORYID CATEGORYNAME PROJECTID PROJECTNAME
---------- ------------ --------- -----------
1          category 1       1      project 1
1          category 1       2      project 2
2          category 2       3      project 3
2          category 2       2      project 2
2          category 2       2      project 2
3          category 3       2      project 2
于 2012-04-29T14:19:51.110 に答える