我目前正在学习sqlite,到目前为止我一直在使用sqlite管理器。
我有不同的表格,想要选择3个或更多人参与过的所有项目名称。
我的项目表看起来像这样:
CREATE TABLE "Project"
("Project-ID" INTEGER PRIMARY KEY NOT NULL , "Name" TEXT, "Year" INTEGER)
我的关系是指定有多少人参与项目:
CREATE TABLE "Works_on"
("User" TEXT, "Project-ID" INTEGER, FOREIGN KEY(User) REFERENCES People(User),
FOREIGN KEY(Project-ID) REFERENCES Project(Project-ID), PRIMARY KEY(User, Project-ID))
所以在简单的视图中(遗憾的是我无法上传图片)你在“Works_on”关系中有这样的东西:
User | Project-ID
-------+-----------
Greg | 1
Daniel | 1
Daniel | 2
Daniel | 3
Jeny | 3
Mark | 3
Mark | 1
现在我需要选择3个或更多人正在处理的项目的名称,这意味着我需要项目3和1的名称。
我到目前为止尝试使用count()但我无法弄清楚如何获取名称:
SELECT Project-ID, count(Project-ID)
FROM Works_on
WHERE Project-ID >= 3
答案 0 :(得分:1)
你需要加入和分组,如下所示:
SELECT t.project-id,t.name
FROM project t
INNER JOIN works_on s
ON(t.project-id = s.project-id)
GROUP BY t.project-id,t.name
HAVING COUNT(*) > 2
答案 1 :(得分:0)
试试这个:
SELECT t1.Project-ID, t1.Name
FROM Project AS t1
JOIN (
SELECT Project-ID
FROM Works_on
GROUP BY Project-ID
HAVING COUNT(*) >= 3
) AS t2 ON t1.Project-ID = t2.Project-ID
答案 2 :(得分:0)
小组适用于项目ID和计数用户(即记录)。保留3个或更多用户的项目ID。然后从项目中选择项目ID的项目。
select name
from project
where "Project-ID" in
(
select "Project-ID"
from works_on
group by "Project-ID"
having count(*) >= 3
);
"项目-ID"顺便说一下,这是一个糟糕的列名。您每次都需要引号以阻止DBMS将其解释为减号操作。将其命名为project_id
或类似的东西。