【发布时间】:2016-07-08 08:07:12
【问题描述】:
我想要的是:If key exist in Oracle SQL Table → UPDATE, otherwise do a INSERT
昨天玩了一整天后,我设法得到了 INSERT 部分(下面的查询),我现在需要的是 UPDATE 部分。
这就是我需要它的原因:我有一个 RadGridView(使用 Telerik 和 WPF)。当用户单击“插入”按钮时,将添加一个新行,并且在用户按 Enter 后,该值将插入到数据库中。但是用户也可以单击 RadGridView 中的可用行并更新值,因此我也需要更新数据库中的值(而不是执行 INSERT)。这就是为什么我想要一个可以执行 Udate 或 Insert 的查询。
感谢任何帮助,如果您有更好的方法来实现 INSERT 部分,我想知道它:)
我正在使用 Oracle SQL Developer (Windows 10)。
ps.我尝试了一些在 StackOverflow 上找到的解决方案,但无法将这些解决方案应用于我的问题。
表 1
+-----------------------------------+------------+--------+
| ID | ORIGTERM | CODE |
+-----------------------------------+------------+--------+
| 126478 | Grass | TEST |
| 374628 | Flower | TEST |
| 128754 | Tree | TEST |
+-----------------------------------+------------+--------+
表2
+-----------------------------------+------------+---------+
| ID |REPLACETERM |SYSCTLANG|
+-----------------------------------+------------+---------+
| 126478 | Gras | 3 |
| 374628 | Blume | 3 |
| 128754 | Baum | 3 |
+-----------------------------------+------------+---------+
我设法得到 INSERT 查询,它看起来像这样(例如插入单词“Plant”):
INSERT ALL
INTO Table1(origterm,code) VALUES (s_origterm,s_code)
INTO Table2(replaceterm) VALUES (s_replaceterm)
SELECT s_origterm, s_code, s_replaceterm
FROM (SELECT 'Plant' s_origterm, 'TEST' s_code, 'Pflanze' s_replaceterm FROM dual)
dual;
我还必须更新 Table2 的 ID 使其与 Table1 中的 ID 相同:
UPDATE Table2 SET Table2.ID = (SELECT Table1.ID FROM Table1 WHERE origterm='Plant')
WHERE replaceterm='Pflanze';
现在我有一个如下所示的表格:
+-----------------------------------+------------+--------------+------+
| ID | ORIGTERM | REPLACETERM | CODE |
+-----------------------------------+------------+--------------+------+
| 126478 | Grass | Gras | TEST |
| 374628 | Flower | Blume | TEST |
| 128754 | Tree | Baum | TEST |
| 100000 | Plant | Pflanze | TEST |
+-----------------------------------+------------+--------------+------+
SELECT g.ID, origterm, replaceterm, code FROM Table1 g, Table2 ct WHERE g.ID = ct.ID;
【问题讨论】:
-
使用
MERGE语句怎么样? -
@psur 你能告诉我怎么做吗?如何将其应用于我的问题?
-
为什么这两个表:table1 & table2 是分开的?
ID列是这两个表之一中的主键吗?为什么要使用这样的数据模型?第三张桌子(ID, ORIGTERM, REPLACETERM, CODE)-table3是什么?你如何获得id=100000 值?它来自一个序列吗?请说明您需要更新哪个表,以及新数据来自哪里,因为我迷路了。 -
@kordirko Table1 保存未翻译的术语,Table2 保存已翻译的术语。这样的数据模型是给我的。第三个Table是Table1和Table2的组合(看最后隐藏的SQL查询)。 ID 是主键。当我在 TABLE1 中插入 ORIGTERM 值时,将为我自动设置 ID,换句话说,我不需要添加 ID。我需要更新第三个表,但这是通过表 1 和表 2 完成的。