【问题标题】:SQLite - Using Multiple values with no relation in WHERE NOT EXISTS statementSQLite - 在 WHERE NOT EXISTS 语句中使用多个没有关系的值
【发布时间】:2016-11-06 21:14:34
【问题描述】:

编辑:答案是您必须在每次连接时启用外键。 SQLiteCommand command = new SQLiteCommand("PRAGMA foreign_keys = ON"

我看了一遍,没有看到与我的问题类似的问题,所以如果有答案,只需指出我的方向,我会继续……

我正在尝试创建一个表,它是另外两个表之间的关系,它存储另一个表的值。

假设表的创建语句是:

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) )

我想要做的是创建一个插入语句,仅当 FirstID 出现在 First 中并且 SecondID 出现在 Second 中时才允许插入到 Third 中。

对我可以尝试什么有帮助吗?我尝试过(但失败了)的语法是:

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)

【问题讨论】:

    标签: c# sqlite


    【解决方案1】:

    外键约束已经禁止无效 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');
    

    【讨论】:

    • 外键约束并没有像我想象的那样禁止不在其他表中的条目。我会试试你的,看看它带我去哪里
    • 经过一番搜索,我找到了答案。谢谢。我不知道您必须在每次连接时启用外键。 SQLiteCommand command = new SQLiteCommand("PRAGMA foreign_keys = ON"....等谢谢你的帮助。我很困惑。
    猜你喜欢
    • 2021-06-13
    • 2019-05-18
    • 2015-05-16
    • 2018-01-28
    • 2014-09-22
    • 1970-01-01
    • 2021-05-26
    • 2013-10-30
    • 2013-04-17
    相关资源
    最近更新 更多