2012-02-15 9 views
0

は、これら2つのテーブルを考えてみましょう:値の選択

--Subscriber_File ---

 
ID GenreId FileName 

01  1,2  TestFile.pdf 

--MasterGenre--

 
ID Genrename 

1  TEst1 

2  Test2 

私はこれを発行するとクエリの結果を次のようにフォーマットします。

Select * From Subscriber_File 
 
ID GenreId  FileName   GenreName 

1  1,2   TestFile.pdf   TEst1,Test2 

どうすればいいですか?

+2

Oracle、SQL Server、PostgreSQL、MySQL、Access、SQLite?あなたは回答者を助けるためにあなたの質問にもっと力を入れなければなりません。 –

+0

たとえば、sybase:P –

+0

@DhruvalDave:(Subscriber_FileでGenreIdを使用しているように)単一の行の1つのフィールドに複数の値を格納すると、First Normal Formに違反します。可能な限り避けるべきです。 –

答えて

1

データが正規化されていません。具体的には、Subscriber_Fileの1行には、1つのエントリがMasterGenre 1とMaterGenre 2の両方にrealtedされているという2つの事実があります.3つのMaterGenresに関連していた場合はどうなりますか?もし10?あなたの事実を関連付けるために要求されたコードは、管理不能な混乱に急速に拡大します。

標準ソリューションは、リレーショナルデータベースシステムを使用しているときに、データを正規化して、各「繰り返す事実」をテーブル内の1つの行で表します。 (Googleの「データベースの正規化」とあなたは本当にテーマに関する記事の数千人を見つけることができます。)ここで、あなたが終わるかもしれない:

Table Subscriber 
SubscriberId 
FileName 

(01, TestFile.pdf) 

Table Genre 
GenreId 
GenreName 

(1, Test1) 
(2, Test2) 

Table SubscriberGenre 
SubscriberId 
GenreId 

(01, 1) 
(01, 2) 

れる些細なbecomseデータを照会ポイント:

SELECT sub.SubscribeId, gen.GenreId, sub.FileName, gen.GenreName 
From Subscriber sub 
    Inner join SubscriberGenre subgen 
    On subgen.SubscriberId = sub.SubscriberId 
    Inner join Gener gen 
    On gen.GenreId = subgen.GenreId 
結果を生成する必要があり

これは

(01, 1, TestFile.pdf, Test1) 
(01, 2, TestFile.pdf, Test2) 

うーんを設定し、あなたはまだ、「1,2」の値を1に、これらの2つの行を変換して挑戦しています。私は誰かにそれに答えるようにします。私の主なポイントは、正規化されたテーブル構造がなければ、何かをするのに問題があるということです。

+0

はいありがとうございました。しかし今、私は上記のようにする必要があります..あなたは助けてください...? – dLcreations

+0

ようこそスタックオーバーフロー!あなたが回答(または質問)を承認または同意する場合は、それらをupvoteします。 (同様に、不同意なものをダウンボトムにすることはできますが、ほとんどの人はそれに強く反対する場合にのみ行います)。 –