I have a table user_test_access which stores test_id and user_id.
user_test_access table stores all the uses who have access to the test as well as which user created the test.
| id | test_creator | test_id | user_id |
|---|---|---|---|
| 1 | 0 | 1 | 901 |
| 2 | 0 | 1 | 903 |
| 3 | 0 | 2 | 904 |
| 4 | 0 | 2 | 905 |
| 5 | 0 | 3 | 906 |
| 6 | 1 | 3 | 907 |
| 7 | 0 | 3 | 908 |
I want a query to return all the test_id where there is no creator. i.e test_creator = 0.
Desired Result:
For the particular data set the answer would be test_id 1 and 2.
The reason test_id 3 is not included is because user_id 907 is the test_creator for it.
What I've tried:
SELECT test_id from user_test_access WHERE id = ALL(SELECT id from user_test_access WHERE test_creator=0)
Can you please help me figure out what I'm doing wrong?
CodePudding user response:
If a missing testcreator is encoded by the value 0, you can just group by the test_id and select only ids where the sum is zero
select test_id
from user_test_table
group by test_id
having sum(test_creator) = 0
CodePudding user response:
You can use not exists operator as the following:
SELECT DISTINCT test_id
FROM user_test_access T
WHERE NOT EXISTS (SELECT 1 FROM user_test_access D
WHERE D.test_id=T.test_id AND D.test_creator=1)
See a demo.
