2011-10-14 30 views
1

編輯:從J. Leffler,奶酪Con Queso或任何知道Informix-SE的人尋求幫助。如何使用從子查詢返回的值插入或更新一行?

的Informix-SE 4.11:

我有一個叫這是用來在每個營業日結束時(週一至週六)調和錢箱「cuadre」表。一旦抽屜被調和後,現金抽屜中的金額被存儲在'cu_sa_cash'列中,行被保存並且系統關閉,商店關閉一天,我們都會喝一些啤酒。在下一個工作日,我們啓動系統,運行一個SQL過程,在該日期發佈的cuadre表中創建(插入)一個新行並再次重複循環。

我想爲我的SQL過程插入與當前日期相同的現金存儲在前一個工作日行的抽屜數量的新行。請記住,這不是SPL,因爲我仍然使用SE 4.11 ..所以,下面的SQL語句是我想要完成的一般想法,但它們不起作用!..你能否提供給我解決方案?..謝謝!

INSERT INTO cuadre(cu_date,cu_en_dincaja) 
    VALUES (TODAY,(SELECT cu_sa_cash 
         FROM cuadre 
        WHERE cu_date = (SELECT MAX(cu_date) 
             FROM cuadre))); 

INSERT INTO cuadre(cu_date) 
    VALUES(TODAY); 

UPDATE cuadre 
    SET cu_en_dincaja = (SELECT cu_sa_cash 
          FROM cuadre 
         WHERE cu_date = TODAY - 1) 
WHERE cu_date = TODAY; 
+1

這個答案(爲你的問題!)說,你不能這樣做,在Informix的SE:http://stackoverflow.com/questions/ 3083609/error-360-can-modify-table-or-view-used-in-subquery –

+0

是的,忘了我在一年多以前問過這個問題..我想用臨時表來保存cu_sa_cash從最大(cu_date) –

回答

0

使用臨時表是解決問題的辦法

0

我一無所知特別informix的,但是這是一個替代語法...

INSERT INTO 
    cuadre (
    cu_date, 
    cu_en_dincaja 
) 
SELECT 
    TODAY, 
    cu_sa_cash 
FROM 
    cuadre 
WHERE 
    cu_date = (SELECT * FROM (SELECT MAX(cu_date) FROM cuadre)) 
; 

注意:這可能返回多行,如果cu_date不獨特。

編輯添加了MySQL解決方法,用於從中讀取以寫入同一張表。值得在Informix中進行測試嗎?

+0

謝謝!..不用擔心,cu_date有一個唯一索引,因爲每天只有一個現金抽屜來調和。我會試一試 –

+1

您不能在Informix中這樣做。您需要SELECT INTO TEMP t1,然後INSERT SELECT * FROM t1(基本上,單語句語法中存在大量的ISOLATION LEVEL類型問題。) – RET

+1

在SE中,您無法從要插入的表中選擇成。在IDS中,你可以,IIRC。對於SE,你必須使用臨時桌子或類似的東西。 –

相關問題