Reputation: 1327
I have a table like this:
╔════╦════════════╦══════════╗
║ id ║ project_id ║ document ║
╠════╬════════════╬══════════╣
║ 1 ║ 1 ║ 3 ║
║ 2 ║ 1 ║ 5 ║
║ 3 ║ 2 ║ 3 ║
║ 4 ║ 2 ║ 4 ║
║ 5 ║ 3 ║ 5 ║
║ 6 ║ 4 ║ 2 ║
╚════╩════════════╩══════════╝
I want all project_id
which do not have document
= 5
In other words, I want this result:
╔════════════╗
║ project_id ║
╠════════════╣
║ 2 ║
║ 4 ║
╚════════════╝
Upvotes: 1
Views: 49
Reputation: 522471
Here is a version you can try which uses joins:
SELECT t1.project_id
FROM
(
SELECT project_id, COUNT(*) AS projectCount
FROM mytable
GROUP BY project_id
) t1
INNER JOIN
(
SELECT project_id, COUNT(*) AS projectCount
FROM mytable
WHERE document <> 5
GROUP BY project_id
) t2
ON t1.project_id = t2.project_id AND t1.projectCount = t2.projectCount
Follow the link below for a running demo:
Upvotes: 1
Reputation: 3756
Try This
SELECT DISTINCT project_id FROM project
WHERE project_id NOT IN(
SELECT project_id FROM project where document = 5
)
Upvotes: 1
Reputation: 72195
Try this:
SELECT project_id
FROM mytable
GROUP BY project_id
HAVING COUNT(CASE WHEN document = 5 THEN 1 END) = 0
Upvotes: 2