繁体   English   中英

如何同时成对应用 Microsoft SQL IN 运算符?

[英]How do I apply the Microsoft SQL IN operator simultaneously pairwise?

我在 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

select 是否可能只有这样的有效对?

我的尝试

出于测试目的,我使用此表和数据。

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM