SQLite:选择一行或在没有行满足条件时返回NULL

时间:2015-05-14 09:40:28

标签: sqlite

我希望INSERT OR REPLACE由'uuid'列值指定的行。我有我的:

INSERT OR REPLACE INTO feature_layer (id, uuid, feature_collection)
VALUES ((SELECT id FROM feature_layer WHERE uuid=?) , ?, GeomFromGeoJSON(?));

此查询是否会执行我想要的操作,这意味着更新由uuid指定的行,或者如果没有这样的行,则插入新的行?

1 个答案:

答案 0 :(得分:1)

  • 假设您的 id 字段定义为 (使用AUTOINCREMENT)

    id INTEGER PRIMARY KEY AUTOINCREMENT

正确的陈述将是

INSERT OR REPLACE INTO feature_layer (id, uuid, feature_collection)
VALUES ((SELECT id FROM feature_layer WHERE uuid=?), ?, GeomFromGeoJSON(?));

(您在查询中错过了一个(

  • 如果您的 id 字段定义为 (没有AUTOINCREMENT)

    id INTEGER PRIMARY KEY

如果没有记录,您需要使用COALESCE设置新的 ID (我为新的 id 添加了一个?被发现:

INSERT OR REPLACE INTO feature_layer (id, uuid, feature_collection)
VALUES (COALESCE((SELECT id FROM feature_layer WHERE uuid=?),?) , ?, GeomFromGeoJSON(?));

根据您的需要,当 id 过滤的 id 相匹配时,您将更新 uuid feature_collection uuid ,如果没有找到记录,那么它将插入一个包含uuid和feature_collection所需值的新记录。

无论如何,请考虑您的 id 字段必须是PRIMARY KEY才能使用此方法。