小编My2*_*ovE的帖子

多行和多列的 Where 子句

我有一个 UDT,它接收 2 个参数,即 ID 和质量

CREATE TYPE [dbo].[ItemUdt] AS TABLE(
[ID] [int] NOT NULL,
[Quality] [int] NULL
)
Run Code Online (Sandbox Code Playgroud)

此 UDT 将用作从表中过滤记录的条件

@ItemList AS ItemUdt READONLY
Run Code Online (Sandbox Code Playgroud)

我想要做的是获取与 ID 和质量都匹配的记录

SELECT * FROM tbl_Item 
WHERE [ID] IN (SELECT ID FROM @ItemList)
AND [Quality] IN (SELECT Quality FROM @ItemList)
Run Code Online (Sandbox Code Playgroud)

但是,上面的查询将匹配包含来自 UDT 的所有质量的所有列出的 ID。例如,如果 UDT 由 (1001, 'Good'), (1002, 'Bad') 组成,则结果将显示所有带有 1001 和 1002 的 ID,以及质量为 'Good' 和 'Bad' 的。但我的预期结果如下:

SELECT * FROM tbl_Item 
WHERE ([ID] = '1001' AND [Quality] = 'Good')
OR …
Run Code Online (Sandbox Code Playgroud)

sql-server

1
推荐指数
2
解决办法
5608
查看次数

标签 统计

sql-server ×1