尽管找了好几天,但我找不到答案!
在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中,并且应用程序仅在语句末尾提供密钥索引。
答案 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