我对变量在 mysql 中的工作方式有疑问。正如我在他们的网站上看到的那样,设置一个变量将对下一行可见。
我的桌子是这样的:
A B C N
1 NULL NULL 4
1 NULL NULL 4
1 1 NULL 4
1 1 NULL 4
1 1 1 4
1 1 1 4
我想要的是只返回带有C = 1
. 如果没有行,则返回B = 1 and C is NULL
如果没有行A = 1 and B is NULL and C is NULL
。
我的想法是:
select N as number,
@var_c := case when (C = 1) then 1 else -1 end as myc,
@var_b := case when (@var_c < 0 and B = 1) then 1 else -1 end as myB,
@var_c := case when (@var_a < 0 and var_b < 0 and C = 1) then 1 else -1 end as myC
from (select @var_a := -1) r_a,
(select @var_b := -1) r_b,
(select @var_c := -1) r_c,
(select A, B, C, N from my_table order by A desc, B desc, C desc) rows
它应该(我想)返回
number myA myB myC
4 -1 -1 1
4 -1 -1 1
4 -1 -1 -1
4 -1 -1 -1
4 -1 -1 -1
4 -1 -1 -1
有了这个,having myA > 0 or myB > 0 or myC > 0
就可以了。
但它正在回归
number myA myB myC
4 1 -1 -1
4 1 -1 -1
4 -1 -1 1
4 -1 -1 1
4 -1 1 -1
4 -1 1 -1
Mysql 不应该跨行保留变量吗?
问候。