私が正しく理解していれば、カテゴリにプロジェクトがあるかどうかを調べたいと思います。次のクエリは、特定のカテゴリに関連付けられているプロジェクトの数を示しています。
すべてのカテゴリに関連付けられているすべてのプロジェクトのリストが必要な場合は、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