2012-04-30 55 views
0

我有這張表:mysql從單個表複雜條件返回單個結果

表(fied1 int,field2 int,field3 varchar(40));

我想沒有一個存儲過程類似,以obtion:

declare int nr default 0; 
select coalesce(max(field1),0) into nr from table where field2=? and field3=?; 
if(nr = 0) then 
    select coalesce(max(field1),0)+1 into nr from table; 
end if; 

我想NR從單一選擇的值。 請幫忙!!!

+0

我認爲case語句應該在這裏工作,但我會先檢查,然後再發布它作爲答案。 –

回答

0

僅使用以下查詢來獲取一個加持續在字段1列插入的值,如果沒有找到匹配的每個地方else子句返回存儲在字段1最大值:

此查詢處理,如果情況有在表中沒有記錄。

在下面的語句過濾crieteria「和字段1 <> 0」是必需的,如果FIELD1可以有0值還以其他方式從以下查詢

Select coalesce(
    max(field1), 
    (select coalesce(max(field1),0)+1 from table) 
    ) 
from table where field2=? and field3=? and field1<>0; 
+0

是不是我想要的。如果條件爲真,我想field1的值,否則我會使用「coalesce(max(field1),0)+1」 –

+0

如果條件爲真field2 = val和field3 = val我需要field1的值否則我想自動增加可以是...... 9999的字段1的值。謝謝 –

+0

該解決方案沒有解決'max(field1)'的值實際爲零的情況。 –

0

我覺得這個刪除此過濾器(和FIELD1 <> 0)捕獲您的要求:

SELECT 
    CASE 
    WHEN (max(field1) IS NULL OR max(field1) = 0) AND field2=? AND field3=? THEN (max(field1)+1) 
    ELSE max(field1) 
    END AS `field1_max` 
FROM table 
相關問題