我设置了一个带有此类输出的审核表(我对设计没有发言权),其中包含日期、用户和“记录”列(XML 输出)
用户 | 日期 | 记录 |
---|---|---|
A | 2023-01-01 | 见下图无法输入此表 |
<updated>
<ID>322ZZ444-4B0A-3A28-8CF3-0T1ZC8D4D1CB</ID>
<STATUS_ID>
<old>2</old>
<new>1</new>
</STATUS_ID>
XML 可以是任意长度并且其中包含其他变量
从另一个表 B 中,我有这样的表:
身份证 | 状态_ID | 优先 |
---|---|---|
322ZZ444-4B0A-3A28-8CF3-0T1ZC8D4D1CB | 1 | 4 |
456AA241-7C1B-4L18-0AH4-7C1B7C1B7C1B | 1 | 4 |
4B0A4B0A-4B0A-4B0A-4B0A-4B0A7C1B4B0A | 2 | 4 |
我想从表 Audit 中的表 B 中查找用户和日期的所有实例。大约有100个条目,我能想到的唯一方法就是使用OR语句。
现在需要是这样的:
select * from Audit table where
cast(record as NVARCHAR(MAX)) like '%322ZZ444-4B0A-3A28-8CF3-0T1ZC8D4D1CB%'
OR cast(record as NVARCHAR(MAX)) like '%456AA241-7C1B-4L18-0AH4-7C1B7C1B7C1B%'
但这对于 100 行来说似乎很笨拙。理想情况下,我希望我可以使用 like 或 in ,但在 like 语句中不允许使用多个值,并且 in 语句需要精确的值(我没有,因为我不知道还做了什么)。
select * from Audit table where
cast(record as NVARCHAR(MAX)) like (select id from Table B where priority=4 and status_id=1)
也许我需要逐个循环表 B 中的值并将它们插入到另一个表中? (假设这似乎可行,但我不知道如何)
您可以使用
INNER JOIN
select * from [Audit table]
JOIN (select id from [Table B] where priority=4 and status_id=1) b
ON cast(record as NVARCHAR(MAX)) like id