我有一个名为Customer
的数据库,其中有一个名为CustDetails
的表。表中的数据类似于下面(为简洁起见,我删除了一些数据)。 ID
是PK。
CustDetails :
ID CustNo Year StatusId
--------------------------
1 1231 2015 1
2 1232 2015 2
3 1233 2015 2
4 1234 2014 1
5 1235 2014 2
我在同一台服务器上有另一个名为Claim
的数据库,它有一个名为ClaimDetails
的表(不要问我为什么这些表不在同一个数据库中但是设计决定是在我加入之前做出的,并不是我可以改变的事情。)
数据类似于下面的内容(为了简洁起见,还删除了一些数据)
ClaimDetails :
ID ClaimNumber CustNo
----------------------
1 1 1231
2 2 1232
3 3 1236
4 4 1237
我有几件事要做:
CustDetails
复制所有行,并将年份更改为2016 CustNo
表中但不在ClaimDetails
表中的CustDetails
- 因为这些会在CustDetails
表中创建一个新行 ID CustNo Year StatusId
--------------------------
1 1231 2015 1
2 1232 2015 2
3 1233 2015 2
4 1234 2014 1
5 1235 2014 2
6 1231 2016 1
7 1232 2016 1
8 1233 2016 1
9 1236 2016 3
10 1237 2016 3
表,并将状态设置为3,将年份设置为2016。因此,对于我上面列出的数据,我想要实现的最终结果是:
CustDetails :
insert into CustDetails (CustNo, Year, StatusId)
select
CustNo, 2016, StatusId
from
CustDetails
where
Year = 2015
到目前为止,我有这个问题:
UPDATE CustDetails
SET StatusId = 1
WHERE Year = 2016 AND StatusId = 2
这涵盖了第1部分。我在上面的查询中没有为第2部分制定逻辑,我想我可以这样做:
CustNo
我再也没有为第3部分完成查询,但我想我可以获得ClaimDetails
但不在CustDetails
中的SELECT CustNo
FROM ClaimDetails
WHERE CustNo NOT IN (SELECT CustNo FROM CustDetails)
<h2>Dinosaurs are cool.</h2>
<script>
document.querySelector('.change-text').addEventListener('click', function () {
document.querySelector('h2').innerText = 'I AM A DINOSAUR!!!';
}); </script>
<button class='change-text'>Change Text</button>
做类似的事情:
$( document ).ready(function() {
console.log( "ready!" );
});
然后分别对每个CustNo的ID进行创建。
问题是这是执行此操作的最佳方式,还是应该首先复制到临时表。即使它们是两个独立的数据库,第三部分的查询也能正常工作 - 我想如果它们在同一台服务器上,只要我完全符合数据库的要求就可以正常运行。
答案 0 :(得分:3)
实际上,在您的第二个查询中,您还将更新在执行第一个查询之前已存在的旧数据。所以我建议像这样使用CASE:
INSERT INTO CustDetails (CustNo, Year, StatusId)
SELECT CustNo, 2016, CASE WHEN StatusId = 2 THEN 1 ELSE StatusId END
FROM CustDetails
WHERE Year = 2015
使用INSERT INTO SELECT:
也可以类似地完成第三个查询INSERT INTO CustDetails (CustNo, Year, StatusId)
SELECT CustNo, 2016, 3
FROM ClaimDetails
WHERE CustNo NOT IN (SELECT CustNo FROM CustDetails)
您必须完全限定数据库,包括模式名称
DatabaseName.SchemaName.TableName
用于多数据库查询。