sql - MSSQL 选择父母 ID 值
问题描述
我正在管理的大型 MSSQL DB 存在一些问题。有一些我试图在一个表中实现的功能。
表外观包含这样的列:
ID MailID
010-123456 12345678
010-123456/1 NULL
010-123456/2 NULL
010-123456/3 NULL
现在,我想要完成的是将每个 Childs MaildID 设置为与其父母 MailID 相同。
ParentID 是与“/”分隔符之前的 Child(Id ID 行)具有相同值的 ID。此外,ID 不应包含任何字符,仅包含数字(执行“-”和“/”)。
所以目前我有这个解决方案:
Declare @MyTable table(Child varchar(MAX),Parent varchar(MAX),ParentMaildId varchar(MAX))
insert into @MyTable
select ID as Child, left(ID, charindex('/', ID)-1) AS Parent, MailID as MailID
FROM [thisismy].[dbo].[table]
where ID not like '%[a-z]%' and ID like '%/%' and MailId is not NULL
select * from @MyTable
--update t1
--SET t1.MailId = t2.ParentMaildId
--FROM [thisismy].[dbo].[table] AS t1
--INNER JOIN @IDAS t2 ON t1.ID = t2.Child
--WHERE t1.ID = t2.Child and t1.MailId is NULL
当我使用 select 语句在此处获取 MyTable 文件时,它只返回我的数据库表中所有案例的一小部分,为什么?
我希望有一个存储过程,可以自动将子项的 Mailid 更新为父项(所有需要的信息都在同一个表中)。
有一个更好的方法吗?
解决方案
我想你想要:
select m.*, p.mailid as imputed_parent
from @mytable m cross apply
(select top (1) p.*
from @mytable p
where m.id like p.id + '/%'
order by p.id desc
) p;
您可以将其放入update
使用相关子查询中:
update m
set mailid = (select top (1) p.mailid
from @mytable p
where m.id like p.id + '/%'
order by p.id desc
)
from @mytable m
where m.mailid is null;
这是一个 db<>fiddle。
推荐阅读
- android - 如何将 onEditorAction 与 Firebase 的 onDataChange 一起使用
- phpmyadmin - cPanel 显示 PHPmyAdmin 以外的其他 PHP 版本
- ios - 创建 git 分支时自动增加内部版本号
- dojo - DOJO 下拉菜单和 datetextbox 在打开/关闭对话框几次后突然停止工作
- perl - 当基础数据被修改时,如何防止引用对象发生变化?
- python - 使用 cython 时出现 GCC 问题
- python - Django 迁移 - django.db.migrations.exceptions.NodeNotFoundError
- jsf - JSF 无法将数据传递给 bootsrtap 模式
- automated-tests - 使用 webdriverio 的 waitUntil() 让 webdriverio 等待一个元素?
- javascript - 来自不同项目/域的 webpack 和 vue 异步组件