【问题标题】:MSSQL Select a parents ID valueMSSQL 选择父母 ID 值
【发布时间】:2021-07-16 10:14:52
【问题描述】:

我正在管理的大型 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 更新为父级(所有需要的信息都在同一个表中)。

有没有更好的方法来做到这一点?

【问题讨论】:

  • 为什么没有合适的自引用外键?而且ID真的可以2Gb吗,为什么一定要varchar(max)

标签: sql sql-server stored-procedures


【解决方案1】:

我想你想要:

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;

Here 是一个 dbfiddle。

【讨论】:

  • 这不起作用。它仍然给我与我当前使用的从声明的@mytable 应用的解决方案相同的输出。当前解决方案的问题是它没有从 [thisismy].[dbo].[table] 中选择几乎所有条目。该解决方案需要在表 [thisismy].[dbo].[table] 中找到所有给定子 ID 的父 MaildID,当然,如果可能,请按照您在此处显示的方式更新它们。
  • @AstralSailor 。 . .我添加了一个 dbfiddle,表明它适用于您在此处提出的问题。如果您的实际问题更复杂,您可能想提出一个问题,并附上适当的样本数据、期望的结果和解释。
  • 说得对,先生,我很抱歉。使用您的示例,我可能会使其正常工作。但是我遇到了:Msg 468, Level 16, State 9, Line 26 无法解决类似操作中“Finnish_Swedish_CI_AS”和“SQL_SwedishStd_Pref_CP1_CI_AS”之间的排序规则冲突。完成时间:2021-07-16T14:56:08.1271035+02:00
  • @AstralSailor 。 . .我真的不知道是什么导致了这个问题。排序规则不是您的问题的一部分,我很难理解为什么同一张表在具有相似信息的列中会有不同的排序规则。
猜你喜欢
  • 2014-05-15
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 2013-07-23
  • 1970-01-01
相关资源
最近更新 更多