2014-01-07 2 views
1

У меня есть две таблицы - artist and albumSql - справочные данные не существует при сравнении двух таблиц

столбцов в artist - id, name, artist_genre

колонн в album - id, name, artist_name, album_genre, release_date

Я хотел бы найти всех художников в таблице альбома, который не входит в жанр, указанный в таблице исполнителя (если быть более конкретным - если у исполнителя X есть жанр «pop» и «rock», зарегистрированный, но создающий альбом Y с жанром «классический», тогда должен быть указан художник, альбом и жанр.

Ваша помощь очень ценится.

ответ

1
select artist_name, name, album_genre 
from album left join artist on artist.name = album.artist_name and album_genre = artist_genre 
where artist.id is null 
+0

Cheers Tomas! Это не совсем сработало. У меня есть решение от Упендры. Благодаря! – user3168017

+1

@ user3168017: Согласно моему мнению, ответ Томаса намного лучше, чем мой ответ по производительности, потому что соединение намного быстрее, чем подзапрос. –

+0

Я попробовал еще раз и заработал. Вы правы upendra, решение Томаса работает лучше. – user3168017

1

Попробуйте это:

select artist_name, name, album_genre 
from album alb 
where album_genre not in (select distinct artist_genre 
          from artist 
          where name = alb.artist_name) 

SQL Fiddle Demo

+0

Благодаря Upendra! Это то, что мне нужно. Сначала я попытался «не существовать», но не смог заставить его работать. Очень признателен. – user3168017

+0

Упендра, +1 для честной игры! :-) – TMS

0

Что об этом ..

"SELECT artist_name FROM album, artist WHERE artist_name = name AND album_genre != album_genre"; 
Смежные вопросы