我需要根据某些条件更新表中的列。
这是表格-
DGTID | SKAcc | Linkedaccount | DGTStatus
1 8002180831 8102651144,8005370302 C
2 8005370302 8002170111 I
3 8002012348 I
因此,对于特定的DGT ID,如果status ='C'并且如果在任何其他SKAcc中存在Linkedaccount,则该SKAcc的DGTStatus也应为C。
让我们说DGTId = 1,它的DGTStatus为'C',并且它的链接帐户='8005370302',这是DGTID ='2'的SKAcc。因此,其DGTStatus也应为'C'
现在,我相信这里的主要部分是提取关联帐户,因为可以有多个逗号分隔的关联帐户。
这就是我写的提取关联帐户的内容-
select replace(''''+LinkedAccount+'''',',',''',''') from IDCOPES..T_CDI_WHT_DGT where ISNULL(LinkedAccount,'')<>''
这给了我'8102651144','8005370302'。
然后,我写了-
IF EXISTS (SELECT 1 from IDCOPES..T_CDI_WHT_DGT where DGTID=1 and DGTSTATUS='C')
UPDATE IDCOPES..T_CDI_WHT_DGT
SET DGTSTATUS='C'
Where SKACC in (select replace(''''+LinkedAccount+'''',',',''',''') from IDCOPES..T_CDI_WHT_DGT where ISNULL(LinkedAccount,'')<>'' and DGTID=1)
但是,这不起作用。 但是,当我写
IF EXISTS (SELECT 1 from IDCOPES..T_CDI_WHT_DGT where DGTID=1 and DGTSTATUS='C')
UPDATE IDCOPES..T_CDI_WHT_DGT
SET DGTSTATUS='C'
Where SKACC in ('8102651144','8005370302')
有效。我不明白为什么当两个代码相同时为什么它不起作用。
答案 0 :(得分:0)
IF EXISTS (SELECT 1 from IDCOPES..T_CDI_WHT_DGT where DGTID=1 and DGTSTATUS='C')
UPDATE IDCOPES..T_CDI_WHT_DGT
SET DGTSTATUS='C'
Where SKACC in (
SELECT
LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)'))) AS Certs
FROM
(
SELECT *,CAST('<XMLRoot><RowData>' + REPLACE(LinkedAccount,',','</RowData>
<RowData>') + '</RowData></XMLRoot>' AS XML) AS x
FROM IDCOPES..T_CDI_WHT_DGT
where LinkedAccount like '%,%'
)t
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n))
答案 1 :(得分:0)
您可以使用以下更新逻辑-
pigz -dckq dump.sql.gz | \
filt_exclude '%session% action_log %_cache' | \
MYSQL_PWD="my-pass" mysql -u user db_name