gpt4 book ai didi

sql-server - 如何更新外键

转载 作者:行者123 更新时间:2023-12-02 16:21:58 24 4
gpt4 key购买 nike

我有 2 张 table ;第一个表的设计如下:

表 1:

    id_Doc_line_sheet (pk),Autonumber
DocNo (text)
lineNo (text)
Sheet No (text)

字段组合(DocNo、lineNo、Sheet No)是索引且唯一的。

第二个表的设计如下:

表 2:

  id_Doc_line_trans (pk), Autonumber
id_Doc_line_sheet (fk),Number
name

现在在表1中,对于字段lineNo,我有带前导空格和不带前导空格的记录,如下所示:

  id_Doc_line_sheet            DocNo        lineNo      Sheet No    
------------------------------------------------------------------
1001 doc-0001 line-0001 1
1002 doc-0001 line-0001 1
1003 doc-0001 line-0001 2
1004 doc-0001 line-0001 2
1005 doc-0002 line-0002 1
1006 doc-0002 line-0002 1
1007 doc-0001 line-0005 1
1008 doc-0001 line-0005 1

我想删除这些带有前导空格的记录,但首先我想为每个唯一的(DocNo,lineNo,Sheetno)更新(id_Doc_line_sheet)以更正一个(没有前导空格)。 我的意思是如果 table2 如下所示:

    id_Doc_line_trans     id_Doc_line_sheet     name
---------------------------------------------------
1 1001 name01
2 1002 name02
3 1003 name03
4 1004 name04
5 1007 name07
6 1008 name08

我将 (id_Doc_line_sheet) 更新为如下所示:

id_Doc_line_trans     id_Doc_line_sheet     name
---------------------------------------------------
1 1001 name01
2 1001 name02
3 1003 name03
4 1003 name04
5 1007 name07
6 1007 name08

然后从第一个表中删除带有前导空格的记录。

请帮忙我该怎么做?

最佳答案

根据我的理解,您似乎想根据使用的 sheet_no 第一个 id 更新 table2 。如果是这样,您可以使用以下内容:

说明

  1. 您需要使用report cte根据sheet_no获取table1中的第一条记录
  2. table2中查找每行对应的sheet_no
  3. 更新 table2 条目,其中 row_number =1

查询

;with report as(
select row_number() over(partition by sheet_no order by id_doc_line_sheet) as [Row],id_doc_line_sheet,sheet_no
from table1
where line_no not like ' %' -- here you can ensure that lin_no doesn't start with leading space
), combined as(
select t2.id_doc_line_trans,
t2.id_doc_line_sheet,
t1.sheet_no
from table2 t2
inner join table1 t1 on t2.id_doc_line_sheet = t1.id_doc_line_sheet
)

update t set t.id_doc_line_sheet = r.id_doc_line_sheet
from report r
inner join combined c on r.sheet_no = c.sheet_no
inner join table2 t on t.id_doc_line_trans = c.id_doc_line_trans
where r.[Row]=1

更新table2后的结果

    id_doc_line_trans   id_doc_line_sheet   name
1 1001 name01
2 1001 name02
3 1003 name03
4 1003 name04

然后您可以根据您的要求应用删除语句

这里是一个工作 demo

希望这对您有帮助

关于sql-server - 如何更新外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47483910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com