MySQL 特例枢轴

标签 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 没有我研究过的枢轴函数,我看到了一些 UNION 等示例,但我需要一个类似(伪代码)的 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 中的字符串中,并且应用程序仅在语句末尾提供键索引。

最佳答案

一种选择是使用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 = ?

关于MySQL 特例枢轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41368918/

相关文章:

sql - Oracle 分页查询中的列无效?

MySQL/PHP 查询性能?

mysql - 将整个 webform 数据库转储到 excel 文件或 csv 中?

php - Laravel Eloquent - created_at 是 X 天前的位置

sql - 使用格式从 sql 开发人员复制查询

sql - 从 SQL 递归查询中添加额外的列

sql - 如何从数据库中获取上个月的数据

java - JDBC for mysql 重复查询性能很慢

mysql - 如何在mysql中处理很长的SQL INSERT语句

MySQL 正则表达式 : matching blank entries