MySQL特殊情况枢轴

时间:2016-12-28 20:00:41

标签: mysql sql

尽管找了好几天,但我找不到答案!

在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没有像我研究的那样有一个pivot函数,我看到一些UNIONs等的例子,但是我需要一个类似于(伪代码)的SQL表达式

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

所以我得到了结果

Order
Manufacturing
Final Inspection

我真的需要查询的最后一行是

WHERE processListID = ?

因为否则我将不得不完全重写我的应用程序,因为SQL存储在java中的String中,并且应用程序仅在语句末尾提供密钥索引。

2 个答案:

答案 0 :(得分:1)

一个选项是使用union取消转换processlist表并将其加入流程表。

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 = ?

答案 1 :(得分:0)

如果您始终只考虑流程列表中的一行(即$log.debug()),则以下查询应该执行一项非常简单且高效的工作:

procsessListId = x