Tim*_*Tim 4 sql-server insert insert-into sql-update
使用 SQL Server 我试图找到表的第 1 列中的每个唯一值,然后使用该唯一的第 1 列值插入一个新行并添加一个第 2 列值。第 2 列的值每次都相同。
注意:我可以通过从数据库中的第 1 列中提取唯一值并为每个值添加一个插入来完成此操作,但我在第 1 列中有 160 万个唯一值,因此以这种方式编写它会很烦人。
以第 1 列中的 2 个唯一值为例:
select *
from dbo.SettopSubscription
where MacAddr = '0000000ee4b5'
or MacAddr = '0000003a9667'
Run Code Online (Sandbox Code Playgroud)
结果:
MacAddr PackageId
------------ -----------
0000000ee4b5 11
0000000ee4b5 3
0000003a9667 241
0000003a9667 241
0000003a9667 11
0000003a9667 211
0000003a9667 8
0000003a9667 4411
0000003a9667 4412
0000003a9667 4479
Run Code Online (Sandbox Code Playgroud)
现在我想将 PackageId = 37 添加到每个唯一的 MacAddr 值,但到目前为止还没有运气写一些东西来查找和添加唯一的值。如前所述,我可以通过为每个 MacAddr 编写插入到脚本中来轻松完成此操作,但这需要永远占用 160 万个 MacAddr 值。
开始视图,同上:
MacAddr PackageId
------------ -----------
0000000ee4b5 11
0000000ee4b5 3
0000003a9667 241
0000003a9667 241
0000003a9667 11
0000003a9667 211
0000003a9667 8
0000003a9667 4411
0000003a9667 4412
0000003a9667 4479
Run Code Online (Sandbox Code Playgroud)
最终结果:
MacAddr PackageId
------------ -----------
0000000ee4b5 11
0000000ee4b5 3
***0000000ee4b5 37***
0000003a9667 241
0000003a9667 241
0000003a9667 11
0000003a9667 211
0000003a9667 8
0000003a9667 4411
0000003a9667 4412
0000003a9667 4479
***0000003a9667 37***
Run Code Online (Sandbox Code Playgroud)
提前感谢您的帮助。
这将为每个不同的记录插入一条记录,MacAddr其中 a PackageIdof37还没有 a PackageIdof 37:
insert into SettopSubscription (MacAddr, PackageId)
select distinct s1.MacAddr, 37
from SettopSubscription s1
where not exists
(
select s2.PackageId
from SettopSubscription s2
where s2.MacAddr = s1.MacAddr
and s2.PackageId = 37
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2604 次 |
| 最近记录: |