sql - 如何成对同时应用 Microsoft SQL IN 运算符?
问题描述
我在 Microsoft SQL 中有一个名为 Account 的表
Name AccountNumber IDNumber
Alpha 1 Z
Bravo 2 Y
Charlie 3 X
Delta 4 W
Echo 5 W <---- Echo has same IDNumber as Delta. This is allowed.
我有一个未知长度的 AccountNumber 和 IDNumber 对列表。仅应返回配对匹配的帐户。
这是此类列表的示例(AccountNumber,IDNumber)
(2,Y) <-- Valid
(4,W) <-- Valid
(1,X) <-- Invalid
(5,X) <-- Invalid
(5,W) <-- Valid
是否可以只选择这样的有效对?
我的尝试
出于测试目的,我使用此表和数据。
DROP TABLE #Account
CREATE TABLE #Account (
[Name] NVARCHAR(100),
[AccountNumber] NVARCHAR(10),
[IDNumber] NVARCHAR(10)
)
INSERT INTO #Account ([Name],[AccountNumber],[IDNumber]) VALUES ('Alpha' ,'1', 'Z')
INSERT INTO #Account ([Name],[AccountNumber],[IDNumber]) VALUES ('Bravo' ,'2', 'Y')
INSERT INTO #Account ([Name],[AccountNumber],[IDNumber]) VALUES ('Charlie' ,'3', 'X')
INSERT INTO #Account ([Name],[AccountNumber],[IDNumber]) VALUES ('Delta' ,'4', 'W')
INSERT INTO #Account ([Name],[AccountNumber],[IDNumber]) VALUES ('Echo' ,'5', 'W')
这会正确返回帐户。
SELECT * FROM #Account
WHERE AccountNumber IN ('2','4','1') AND IDNumber IN ('Y','W','X')
Name AccountNumber IDNumber
Bravo 2 Y
Delta 4 W
但这是不正确的
SELECT * FROM #Account
WHERE AccountNumber IN ('4','5') AND IDNumber IN ('W','X')
Name AccountNumber IDNumber
Delta 4 W
Echo 5 W
我需要 4-W 配对和 5-X 配对。
(我的目标是使用 Linq 从 C# 执行此操作。作为第一次尝试,我想看看这在 SQL 中是否可行。)
解决方案
用于values
生成列表,然后join
:
SELECT a.*
FROM #Account a JOIN
(VALUES ('2', 'Y'), ('4', 'W'), ('1', 'X')
) v(AccountNumber, IDNumber)
ON a.AccountNumber = v.AccountNumber AND
a.IDNumber = v.IDNumber;
推荐阅读
- linq - 需要帮助将 SQL 转换为 LINQ
- javascript - 如何检查路径中的每个文件是否可以读取
- mysql - 将两个日期戳添加到单个 SSRS 表达式/单元格中
- amazon-ec2 - 在 NAT 环境中配置 Cassandra 部署
- yii - Yii2- ArrayHelper 改变数组的索引
- r - Chloropleth map with geojson and ggplot2
- docker - 将 jar 添加到 Confluent Docker 中的通用 Kafka Connect 类路径
- java - 如何在主要活动中使用带有媒体播放器的新类?
- android - 无法在 Azure VM 上使用 WHPX 运行 Android 模拟器
- sql-server - 如何从 Informatica Developer(10.1,不是 Power Center)执行 SQL Server 存储过程