SQLite:如果存在则更新或使用不同表

时间:2015-09-15 06:56:31

标签: sql sqlite

我有三张桌子A,B和C.

A:
----------------
index_a | value
----------------

B:
----------------
index_b | value
----------------

C:
----------------------------
index_c | table_name | value_c
----------------------------

现在用户给了我值,表名和new_value_c 。表名可以是A或B,值是表A或B的相应值。现在,如果给定表中存在匹配给定值的记录,我们将获得该表的索引(index_a或index_b)并尝试在表C中插入如果没有该索引和表名的记录,否则我们将更新new_value_c。如果没有记录匹配值和表名,那么我们将不会做任何事情。

我知道我们可以使用一个 SELECT 来获取表A或B的索引,然后 INSERT OR REPLACE INTO 表C.我想知道它是否可以实现单个sql命令。

1 个答案:

答案 0 :(得分:2)

您可以在一个声明中使用INSERT OR REPLACESELECT。试试这个:

INSERT OR REPLACE INTO C (index_c, table_name, value_c)
SELECT index_a, 'A', ?3 FROM A WHERE value = ?1 AND 'A' = ?2
 UNION
SELECT index_b, 'B', ?3 FROM B WHERE value = ?1 AND 'B' = ?2

有:?1 - 的占位符,?2 - 表名?3 - new_value_c