Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL特例透视_Mysql_Sql - Fatal编程技术网

MySQL特例透视

MySQL特例透视,mysql,sql,Mysql,Sql,我找了好几天也找不到答案 在MySQL中,我有两个表 ProcessList包含进程表中的所有外键 ID |Operation1|Operation2|Operation3|etc.... --------------------------------------- 1 | 1 | 4 | 6 | .... --------------------------------------- 2 | 2 | 4 |

我找了好几天也找不到答案

在MySQL中,我有两个表

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函数,我看到了一些使用联合等的示例,但我需要一个类似(伪代码)的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))