MySQL特例透视
我找了好几天也找不到答案 在MySQL中,我有两个表 ProcessList包含进程表中的所有外键MySQL特例透视,mysql,sql,Mysql,Sql,我找了好几天也找不到答案 在MySQL中,我有两个表 ProcessList包含进程表中的所有外键 ID |Operation1|Operation2|Operation3|etc.... --------------------------------------- 1 | 1 | 4 | 6 | .... --------------------------------------- 2 | 2 | 4 |
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函数,我看到了一些使用联合等的示例,但我需要一个类似(伪代码)的SQL表达式
所以我得到了结果
Order
Manufacturing
Final Inspection
我真的需要查询的最后一行
WHERE processListID = ?
因为否则,我将不得不完全重写我的应用程序,因为SQL存储在java中的字符串中,并且应用程序仅在语句末尾提供键索引。一个选项是使用
union
取消调用processlist表并将其连接到process表
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 = ?
如果您总是只考虑进程列表中的一行(即<代码> PraseSistIdID=X),下面的查询应该执行一个相当简单和性能良好的工作:
select p.name from process p, list l
where l.id = 2
and (p.id in (l.operation1, l.operation2, l.operation3))
进程数是可变的吗?你可能应该让
ProcessList
基于行而不是基于列,但我想你现在已经意识到了这一点。当我研究出如何更好地编程“邪恶的”javafx tableviewer时,我肯定会在我的应用程序中实现基于行的。
select p.name from process p, list l
where l.id = 2
and (p.id in (l.operation1, l.operation2, l.operation3))