2016-12-28 10 views
1

私は何日も探しているにもかかわらず、これに対する答えを見つけることができません!MySQLの特別なケースのピボット

2、表

PROCESSLISTは、すべてのプロセス表から外部キー今

ID |Operation1|Operation2|Operation3|etc.... 
--------------------------------------- 
1 | 1  | 4  | 6 | .... 
--------------------------------------- 
2 | 2  | 4  |  5 |.... 
--------------------------------------- 
. 
. 
. 

Process Table 
ID | Name 
------------------- 
1 | Quote 
2 | Order 
3 | On-Hold 
4 | Manufacturing 
5 | Final Inpection 
6 | Complete 

が含まれているを持っている私は、私はSQLに新しいですが、私はアイブ氏が研究としてMYSQL doesntのは、ピボット機能を持っていることを理解してMySQLで

、と私は労働組合とのいくつかの例などを参照してください、私はので、私は結果を取得する(擬似コード)

SELECT name FROM process 
(IF process.id APPEARS in a row of the ProcessList) 
WHERE processListID = 2 

のようなSQL式のものが必要

Order 
Manufacturing 
Final Inspection 

そうでない場合、私はSQLをJavaで文字列に格納されている完全に私のアプリを書き換える必要があり、アプリのsupliesますので、私は本当に

WHERE processListID = ? 

するクエリの最後の行を必要としますキー索引はステートメントの最後にのみ存在します。

+0

が変数プロセスの数です? – shmosel

+0

おそらく、 'ProcessList'を列ベースではなく行ベースにするべきですが、今はそれを理解していると思います。 – shmosel

+0

「EVIL」javafxテーブルビューアを少し上手くプログラムする方法を学んだとき、私は確かに私のアプリケーションで行ベースを実装しています。 – marc

答えて

1

1つのオプションは、unionを使用してプロセスリストテーブルをアンピボットし、プロセステーブルに参加させることです。

select p.name 
from process p 
join (select id,operation1 as operation from processlist 
     union all 
     select id,operation2 from processlist 
     union all 
     select id,operation3 from processlist 
     --add more unions as needed based on the number of operations 
    ) pl 
on pl.operation=p.id 
where pl.id = ? 
+0

多くのおかげで、その瞬間の私を救った! – marc

0

あなたは常にプロセス・リスト(すなわちprocsessListId = x)でのみ単一行を考慮した場合、次のクエリは非常にシンプルかつパフォーマンスの高い仕事をする必要があります。

select p.name from process p, list l 
where l.id = 2 
    and (p.id in (l.operation1, l.operation2, l.operation3)) 
関連する問題