2017-02-09 80 views
1

注意:此問題特別針對HSQLDB和Informix。HSQLDB -Query - 如果不存在則插入第一條記錄

我想插入新的條目,如果不存在在表中,我知道我們可以使用存在的查詢插入基於現有的條目。

例如:

INSERT INTO test(column1) 
(SELECT DISTINCT 3 
FROM test 
WHERE NOT EXISTS (SELECT * FROM test WHERE column1 =3)); 

問題是:條件組合使用與子查詢,被認爲要滿足的存在,如果所述子查詢返回的至少一行。那麼只有我們可以在SELECT,INSERT,UPDATE或DELETE語句中使用。

+0

您的INSERT看起來不對。您尚未存在的新數據在哪裏? – fredt

+0

@fredt:在示例查詢中,新數據是「3」,在EXISTS子查詢的選擇列表和WHERE子句中引用。 –

+0

我不清楚你的問題是什麼。你的'問題是'段落概述了爲什麼INSERT語句會做你說你想做的事情,所以我不明白哪裏出現了呃逆。有沒有其他的DBMS以某種方式處理這個問題?如果您有適當的主鍵約束,如果表中已經有一行具有相同的鍵數據,則簡單的INSERT將無法插入;你所要做的就是決定忽略錯誤(你忽略了一個特定的錯誤條件,而不是全部)。如果你願意,你可以使用存儲過程來處理它。請澄清你的問題。 –

回答

2

這是CREATE TABLE語句:

CREATE TABLE test(column1 int) 

這是HSQLDB INSERT語句。它使用SQL標準語法,並應與Informix的工作,以及:

INSERT INTO test(column1) 
    SELECT * FROM (VALUES (3)) 
    WHERE NOT EXISTS (SELECT * FROM test WHERE column1 =3) 

這是SELECT語句,以顯示在表格中

SELECT * FROM test 

此行是的SELECT

結果
COLUMN1 
------- 
3  

1 row(s) in 0 ms 

由於Informix不支持VALUES表構造函數,因此需要創建一個只有一行的單獨表,類似於Oracle的DUAL表。然後您在SELECT中使用此表。

INSERT INTO test(column1) 
    SELECT 3 FROM single_row_table 
    WHERE NOT EXISTS (SELECT * FROM test WHERE column1 =3) 
+0

它不起作用。正如我所描述的,最初表格是空的,在這種情況下,它將返回0記錄作爲插入,並從不工作。 – sivaspon

+0

當表格爲空時,該語句將用'3'插入一行。 – fredt

+0

不是。我試過與HSQLDB相同,但它不起作用。 – sivaspon

相關問題