具有WHERE条件的SQLite查询显示名称 - 多个表

时间:2016-03-01 14:15:11

标签: sql sqlite

我目前正在学习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

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或类似的东西。