2012-03-07 23 views
3

1対多のテーブル設定があります。私がしたいのはテーブルを結合することですが、異なる組み合わせを示す複数の行を返すのではなく、3つのフィールドを持つ1つの行を返すようにしたいのです。1つの行から複数​​の行を1つの行にまとめる

Data: 
dataID (primary key), 
other data, 
other data, 
other data 

Codes: 
codeID, 
dataID (foreign key), 
codeValue 

予想される出力: DATAID、codeValue1、codeValue2、codeValue3

+1

を持っていることを確認してくださいにする必要がありますcodes' 'からどのような値を決定するもの第1、第2、または第3フィールド?それは問題ですか?あるいは、 'codeID'は何らかの形で値が入るスロットを決定しますか? –

+0

順序はそれほど重要ではありませんが、どこに行くかを決定できるcodeSequenceというフィールドがあります。 – bmbaeb

+1

これは技術的には、MySQLが直接サポートしていないピボットテーブルです。醜い回避策がありますが、最も簡単なのは、誰かが50マイル以内で瞬きすると壊れるクエリをハッキングするのではなく、単にクライアントで変換を行うことです。 –

答えて

1
select concat(DataID,',',CodeValues) ExpectedOutput from 
(
    select A.dataID,GROUP_CONCAT(B.codeValue ORDER BY B.codeID) CodeValues 
    from (select dataID from Data) A 
    inner join Codes B using (dataID) group by A.dataID 
) AA; 

あなたは、この複合インデックス

ALTER TABLE Codes ADD INDEX data_code_ndx (dataID,codeID,codeValue); 
関連する問題