2011-07-19 5 views
1

私はtable_name(table_a)というカラムを持つテーブルを持っています。これは私のデータベースの別のテーブルの名前です。例えば別のテーブルに定義されたテーブルのmysql join

table_a 
========= 
id table_name group_id 
------------------------------ 
1  table_b  1 
2  table_b  1 
3  table_c  1 
4  table_d  2 

table_b 
========= 
id val table_a_id 
------------------------- 
1  val1 1 
2  val2 2 
3  val3 10 

table_c 
========= 
id val table_a_id 
------------------------- 
1  val4 3 

table_d 
========= 
id val table_a_id 
------------------------- 
1  val5 4 
2  val6 5 

iはGROUP_IDをもとにtable_aの行ごとにvalを返します単一クエリを書きたいです。例えば、私がgroup_id = 1を使用した場合、私はval1, val2, val4を単一のクエリから返すでしょう。返される値は、IListの区切り、それが列または何もすることができコンマである必要はありません。重要なことは、私は単一のクエリ

答えて

3
SELECT val FROM table_a 
INNER JOIN 
    SELECT * FROM (
    SELECT 'tabel_b' as table_name, id, val, table_a_id FROM table_b 
    UNION 
    SELECT 'tabel_c' as table_name, id, val, table_a_id FROM table_c 
    UNION 
    SELECT 'tabel_d' as table_name, id, val, table_a_id FROM table_d 
) u_tables ON (u_tables.table_a_id = table_a.id 
    /* This part is optional, because the u_tables.table_a_id already links 
    to a unique key in table_a and thus the link to table_name is not needed 
       AND table_a.table_name = u_tables.table_name) 
    if I've missed something in your idea/design you can use it if you want*/ 
       ) 
WHERE table_a.id = 1 

でそれを行うことができるということですそれはスピードのために任意の価格に勝つことはないだろうかエレガントなデザインですが、テーブルのサイズが十分に小さい限り、動作するはずです。

実際にu_tables.table_nameにリンクする必要がない場合は、このクエリをいくつかの方法で高速化できます。

関連する問題