2016-11-06 71 views
0

編輯:答案是您必須在每次連接時啓用外鍵。 SQLiteCommand command = new SQLiteCommand("PRAGMA foreign_keys = ON"SQLite - 在WHERE NOT EXISTS語句中使用多個無關聯的值語句

我看了所有的地方,並沒有看到一個模擬我的問題,所以如果有一個答案只是指向我這個方向,我會繼續前進......

我想創建一個表格,這是另外兩個表格之間的關係,它存儲另一個表格的值。

比方說,創建表的語句是:

CREATE TABLE First (FirstID Integer PRIMARY KEY, Name Text, otherThing Text) 

CREATE TABLE Second (SecondID Text PRIMARY KEY, OtherStuff VarChar(10)) 

CREATE TABLE Third (FirstID Integer, SecondID Text, SomeData Text, 
    FOREIGN KEY (FirstID) REFERENCES First(FirstID), 
    FOREIGN KEY (SecondID) REFERENCES Second(SecondID), 
    PRIMARY KEY (FirstID, SecondID)) 

我想要做的就是創建一個INSERT語句,只允許插入三時FirstID存在於第一和SecondID存在在第二。

任何幫助我可以嘗試?我試過的(並且失敗的)語法是:

INSERT INTO Third (FirstID, SecondID, SomeData) SELECT 123, "foo", "Interesting Data Here" WHERE EXISTS (SELECT FirstID FROM First AND SELECT SecondID FROM Second) 

INSERT INTO Third (FirstID, SecondID, SomeData) SELECT 123, "foo", "Interesting Data Here" WHERE EXISTS (SELECT FirstID FROM First) AND WHERE EXISTS(SELECT SecondID FROM Second) 

回答

0

外鍵約束已經禁止無效ID。

但是,如果您想默默忽略不存在ID的行,則必須手動檢查。 你的第二個查詢是正確的,但不能有一個以上的WHERE子句:

INSERT INTO Third (FirstID, SecondID, SomeData) 
SELECT 123, 'foo', 'Interesting Data Here' 
WHERE EXISTS (SELECT 1 FROM First WHERE FirstID = 123) 
    AND EXISTS (SELECT 1 FROM Second WHERE SecondID = 'foo'); 
+0

外鍵約束被不禁止像我想的那樣是不是其他表中的條目。我會嘗試你的,看看它需要我 – Fiend394

+0

然後你[沒有啓用它們](http://stackoverflow.com/questions/9937713/does-sqlite3-not-support-foreign-key-constraints/9937992#9937992) 。 –

+0

經過一番搜索,我找到了答案。謝謝。我不知道你必須在每次連接時啓用外鍵。 SQLiteCommand command = new SQLiteCommand(「PRAGMA foreign_keys = ON」.... etc等 感謝您的幫助,我很困惑。 – Fiend394