I have the following two tables:
Singers
x
identification name
-------------------------
20 Bolton
21 Madonna
22 Nirvana
23 Hendrix
Colaborate
first_singer_id second_singer_id genre
---------------------------------------------------
20 21 pop
21 23 pop
22 21 rock
23 20 rock
23 21 metal
23 21 hiphop
23 22 pop
I want to get a result where every name of the singers table has stated in a second column whether or not they sing metal. So for example Hendrix and Madonna sing metal so the table should look like this:
name metal
--------------
Bolton N
Madonna Y
Nirvana N
Hendrix Y
I have tried the following but I don’t get distinct results nor does it take into account the symmetric relation of Colaborate.
select case when C.genre= 'metal' then "Y" else "N" end as genre, S1.name
from Colaborate C
JOIN Singers S1
ON S1.identification = C.first_singer_id
JOIN Singers S2
ON S2.identification = C.second_singer_id
How can I solve this with a CASE expression?
Advertisement
Answer
You can ascertain this a number of ways, one way would be using exists
Select name,
case when exists (select * from colaborate c where c.first_singer_id=s.identification and genre='metal')
or exists (select * from colaborate c where c.second_singer_id=s.identification and genre='metal')
then 'Y' else 'N' end as Metal
from Singers s