我们有不同的流程,例如设计,样品,模拟,凸版印刷,追踪,印刷。但是某项工作可以随意做任何工作。 我想选择打印流程,但在此之前我想检查之前的流程是否已经完成。
如果已完成显示下一个过程,我想检查上一步。
状态含义:
1 等于结束
0 等于 NOT YET FINISH
我使用以下查询,但它无法正常工作。
SELECT *
FROM process
WHERE status = 0
AND (SELECT * FROM process WHERE step=step-1 AND status=1)
PROCESS TABLE
+-----------+----------+------------+-----------+----------+
| ID | Job Code | Job Name | Step | Status |
+-----------+----------+------------+-----------+----------+
| 1 | J0003 | Designing | 0 | 1 |
| 2 | J0003 | Sample | 1 | 1 |
| 3 | J0003 | Printing | 2 | 0 |
+-----------+----------+------------+-----------+----------+
结果:
+-----------+----------+------------+-----------+----------+
| 3 | J0003 | Printing | 2 | 0 |
+-----------+----------+------------+-----------+----------+
这应该是结果,因为第一步和第二步已经完成。完成,为什么因为行status
的值为1.
如果第二个进程 Sample 的状态值等于0,则结果为空或显示为空。
答案 0 :(得分:2)
如果您使用合格的列名,我怀疑您的查询会执行您想要的操作:
SELECT p.*
FROM process p
WHERE p.status = 0 AND
EXISTS (SELECT 1 FROM process p2 WHERE p2.step = p.step - 1 AND p2.status = 1);
答案 1 :(得分:0)
试试这个
SELECT p1.*
FROM process p1 WHERE p1.status = 0 AND
p1.id not in (SELECT p2.id FROM process p2 WHERE p2.step = p1.step - 1 AND p2.status = 1);