SQL Server查询到Oracle查询转换

时间:2013-03-07 10:54:20

标签: sql oracle

我需要在Oracle中编写查询,但我对SQL Server更熟悉。

在SQL Server中,查询将如下所示:(简化)

if exists (
    select * from table where a=1
)
begin
    update table set b=1 where a=1 
end else 
begin 
    insert table (a,b) values(1,1) 
end

感谢您的帮助:)

=============================================== ================================

这是Merge选项,(我认为):

MERGE INTO table T
USING (
    SELECT a,b
    FROM table
) Q
ON T.a = Q.a
WHEN MATCHED THEN
    UPDATE SET T.a = 1
WHEN NOT MATCHED THEN
    INSERT table (a,b) VALUES (1,1);

这是对的吗?

1 个答案:

答案 0 :(得分:2)

这应该是Oracle 11g的正确语法。我不是Oracle的专家,所以也许其他人可以更好地解释它,但我相信在插入新值时会使用dual表,或者从另一个表中尝试过合并。

MERGE INTO table1 T
USING (
    SELECT 1 a, 1 b FROM dual
) Q
ON (T.a = Q.a)
WHEN MATCHED THEN
    UPDATE SET b = 1
WHEN NOT MATCHED THEN 
    INSERT (a,b) VALUES (Q.a,Q.b);

Working example