2016-09-15 11 views
0

私はこの2つのテーブルを持っています。私はそれをできるだけシンプルにするよ:MySQLの1対多関係の単一クエリ

Sample value in main_table: 
id = 1 

Sample value in details_table: 
id = 1 
type = book 
name = harry potter 

id = 1 
type = paper 
name = post it 

私は必要な結果は、これら2種類の名前とIDを取得することです。

id book   paper 
1  harry potter post it 

これは可能ですか?

答えて

1

あなたの予想出力はあなたがtypeを旋回し、その値に基づいて列を生成することを示唆しています。表示されることができる唯一のタイプはbookpaperされていると仮定すると、次のクエリは動作するはずです:ここ

SELECT t2.id, 
     MAX(CASE WHEN t2.type = 'book' THEN name ELSE NULL END) AS book, 
     MAX(CASE WHEN t2.type = 'paper' THEN name ELSE NULL END) AS paper 
FROM main_table t1 
INNER JOIN details_table t2 
    ON t1.id = t2.id 
GROUP BY t2.id 

デモ:あまりに

SQLFiddle

+0

MAXは何ですか? – aozora

+0

@aozoraこれはピボットクエリーであり、 'MAX'は各ピボット列から' NULL'値を保持しません。 –

+0

ありがとう私は自分がやっていることについて適切な言葉を知らない。今私はそれがピボットであることを知っている。 – aozora

2

は単純に二倍の詳細テーブルに参加:

Select m.id, d1.name as book, d2.name as paper from main_table m 
join Details_table d1 on m.id =d1.id and d1.type = 'book' 
join Details_table d2 on m.id =d2.id and d2.type = 'paper' 
+0

ニースの答えを。しかし、私は一度参加するのが好きです。より大きなクエリのパフォーマンスに影響するかどうかはわかりません。まだ素晴らしい答え – aozora