正しく理解すれば、カテゴリにプロジェクトがあるかどうかを調べることができます。次のクエリは、特定のカテゴリに関連付けられているプロジェクトの数を示します。
すべてのカテゴリに関連付けられたすべてのプロジェクトの一覧を表示する場合は、2番目のクエリを使用できます。 INNER JOIN
のため、カテゴリ4は2番目の結果に表示されません。このカテゴリに関連付けられているプロジェクトがないためです。カテゴリ4を表示するには、INNER JOIN
をLEFT OUTER JOIN
に変更する必要があります。
Click here to view the demo in 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
行方不明 'C'があります: ' – Pedro
おかげC 'カテゴリーからは、私はthath私を忘れてしまいました一回以上使用することができます。INNER JOIN ^^ – HyperX
@Pedro:ありがとうございました。それを修正しました。 –