我有疑問如何在mysql中使用變量。正如我在他們的網頁上看到的,設置一個變量將會在下一行顯示出來。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橫跨行的瓦爾?
問候。
實際上,我在整個S/O的許多查詢中都使用了sqlvars。基礎是,你可以在一個單獨的(你選擇AtVar1:= 0,AtVar2:= 0,AtVar3:='test',AtEtc:='more')sqlvars中執行from子句。然後,如果您希望調整變量,則可以按照原樣進行操作,並且新值可用於查詢中的下一行。但是,您能否提供一些真實的樣本數據,包括您所期望的結果與預期結果。儘管我明白你的標準。 – DRapp 2012-04-28 00:23:45
@DRapp我真的給了我的表的示例。而我想要的。感謝您的評論 – ssedano 2012-04-28 20:08:07
好吧,然後讓我問這個。如果甚至有一個C = 1的SINGLE行,你是否永遠不想要任何A或B限定符(一個查詢)?或者在每行的基礎上,每個都被確定爲包含或不包含NULL值。這將允許許多行,但包括符合C = 1或C = NULL且B = 1或C = NULL且B = NULL且A = 1的ALL。您的結果集可以包含全部3種(這些類型的記錄)。你想要哪個版本。 – DRapp 2012-04-28 20:44:18