【问题标题】:SQLite If Not Exist (Select...) EquivalentSQLite 如果不存在(选择...)等效
【发布时间】:2012-04-26 13:40:55
【问题描述】:

我的 Android 应用中有两个 SQLite 表:

  • PoweredEquip,其中包含所有动力设备单元及其相关拖车
  • 包含当前未连接到动力装置的所有拖车的拖车

填充这两个表时,如果 VIN 在 PoweredEquip 表中不存在,我只需要插入到 Trailers 表中。所以在 T-SQL 中,我会做类似的事情

If Not Exists (Select VIN From PoweredEquip Where VIN = _VIN)
    Insert Into Trailers Values (.....)

无需在 PoweredEquip 上进行 Select,打开 DataReader 并检查 HasRows 是否为 False 即可进行插入,我希望 SQLite 中有一个 If Not Exists (Select...) 等效项。

【问题讨论】:

  • 您是否尝试查看是否可以检查所选结果是否为空?或计数 == 0?
  • 这个 SO 问题看起来和你的很相似:stackoverflow.com/questions/531035/…
  • @Jon 我看到了那个帖子,但看起来那个 OP 只是在处理一张桌子。在插入另一个表之前,我需要检查一个表中的值。

标签: android sqlite


【解决方案1】:

在 SQLite 中没有直接的等价物。插入不支持任何条件(除非您通过 INSERT INTO TABLE SELECT..' 执行此操作。可能可以使用 INSTEAD OF INSERT 触发器构建类似的东西,该触发器是否基于 CASE 进行插入。或者使用删除不属于表的行的AFTER INSERT 触发器。

未经测试:

CREATE TRIGGER remove_bad AFTER INSERT ON Trailers BEGIN
    DELETE FROM Trailers WHERE NEW._VIN IN (SELECT VIN FROM PoweredEquip);
END;

编辑其他答案中提到的方式也应该有效:

INSERT INTO Trailers(columns, ..) SELECT 'values',.. WHERE NOT EXISTS 
    (SELECT 1 FROM PoweredEquip WHERE VIN = '_VIN-value');

【讨论】:

    猜你喜欢
    • 2012-03-14
    • 2021-07-13
    • 2014-02-21
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    相关资源
    最近更新 更多