2016-04-17 8 views
0

レコードコレクションで構成されるオープンソースデータベース(LibreOffice Base)でシンプルなテーブルを作成しました。これには、アーティスト、アルバム、年、レコードラベル、レコードコードが主キーとして含まれています。私は、そのアーティストが複数のラベルを持っていたときだけアーティストとレコードレーベルを表示するSQLクエリを作成しようとしています。SQLクエリ - 異なる値の場所のみを表示する方法

SELECT "RecordLabel", "ArtistName" 
FROM "record_collection" 
GROUP BY "ArtistName", "RecordLabel" 
HAVING (MIN ("RecordLabel") > 1) AND... 

この場合、同じアーティストのラベルは異なります。例えば、Frank Sinatraは3つの異なるラベルに載っていました。私は彼の名前と3つのラベルを表示するだけです。

ご協力いただければ幸いです!

答えて

0

次のようなクエリを使用して複数のラベル上のアーティストのリストを取得することができます。

SELECT ArtistName 
FROM record_collection 
GROUP BY ArtistName 
HAVING COUNT(DISTINCT RecordLabel) > 1; 
その後、詳細を取得するクエリでこれを使用することができます

SELECT rc.* 
FROM record_collection rc 
WHERE rc.ArtistName IN (SELECT ArtistName 
         FROM record_collection 
         GROUP BY ArtistName 
         HAVING COUNT(DISTINCT RecordLabel) > 1 
         ); 

詳細巧妙なアプローチでは、アーティストのレコードを選択します。別のレーベルのアーティストのレコードがあります。

SELECT rc.* 
FROM record_collection rc 
WHERE EXISTS (SELECT 1 
       FROM record_collection rc 
       WHERE rc2.ArtistName = rc.ArtistName AND rc2.RecordLabel <> rc.RecordLabel 
      ); 

このバージョンは、おそらく適切なインデックスでより良いパフォーマンスを備えています。

+0

ありがとうございました!私はそれがそれのようなものであることを知っていた。私はまだかなりSQLに新しいですし、私はDISTINCTコマンドを配置する場所を把握できませんでした。それは完璧に働いた! –

関連する問題