2016-03-01 44 views
2

我目前正在學習sqlite,至今我一直在使用sqlite管理器。SQLite查詢顯示名稱與WHERE條件 - 多個表

我有不同的表格,並希望選擇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

試試這個:

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 
+0

非常感謝這個工作,但該死的,遠離我的初始解決方案,仍然需要學習很多。將在5分鐘內接受。 – user6002889

1

您需要having子句這樣的加入和group by:

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 
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 
); 

順便提一下,「Project-ID」是一個錯誤的列名稱。每次需要引號以阻止DBMS將其解釋爲負操作。將其命名爲project_id或者其他類似的東西。