![](/img/trans.png)
[英]Insert into a temporary table and update another table in one SQL query (Oracle)
[英]How to INSERT into 1 table and UPDATE another table in one query
我对如何编写单个查询进行插入和更新有疑问。 下面是方案。 我正在尝试对(-----)中包含的部分使用1个查询
CREATE TABLE #TEMP
(
Ref VARCHAR(10),
Num INT,
[Status] VARCHAR(3)
)
INSERT INTO #TEMP
VALUES ('A123', 1, 'A3'), ('A123', 2, 'A3'), ('A123', 3, 'A3'),
('B123', 1, 'A1'), ('B123', 2, 'A3'),
('C123', 1, 'A1'), ('C123', 2, 'A2'), ('C123', 3, 'A3');
SELECT
Ref,
CASE WHEN A.TotalCount = A.DenialCount THEN 1 ELSE 0 END IsDenial
--CASE WHEN A.TotalCount <> A.DenialCount Then 1 else 0 end IsApproval
INTO
#TEMP1
FROM
(SELECT
Ref, COUNT(Num) TotalCount,
SUM(CASE WHEN [Status] = 'A1' THEN 1 ELSE 0 END) ApprovedCount,
SUM(CASE WHEN [Status] = 'A2' THEN 1 ELSE 0 END) PartialApprovalCount,
SUM(CASE WHEN [Status] = 'A3' THEN 1 ELSE 0 END) DenialCount
FROM
#temp
GROUP BY
Ref) A
UPDATE A
SET A.[Status] = CASE WHEN IsDenial = 1 THEN 'A3' ELSE 'A1' END
FROM #TEMP A
JOIN #TEMP1 B ON A.Ref = B.Ref
SELECT * FROM #TEMP
SELECT * FROM #TEMP1
DROP TABLE #TEMP
DROP TABLE #TEMP1
任何帮助,将不胜感激。
“将INSERT插入1个表并在一个查询中更新另一个表”
不。 一些DBMS支持'upsert'的想法,但这是在单个表中插入/更新。
您正在寻找MERGE陈述。 但是,我在您的帖子中看到了几个与SQL有关的问题。 简而言之,使用集合论代替考虑每个语句的优化通常更有效。
而不是更新,为什么不将插入temp的数据加入第二个查询并产生所需的结果呢?
提示'SELECT'ABC'as a,'123'as b,456 as c UNION'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.