Sql server 唯一左连接多对多表

Sql server 唯一左连接多对多表,sql-server,Sql Server,我正在使用sqlserver,我有两个表,其中包含以下数据。我需要选择那些不重复的匹配行 表A: A_ID | Item_ID -------------------- 1 | 101 2 | 101 3 | 103 4 | 103 5 | 199 表B: B_ID | Item_ID -------------------- 11 | 101 12 | 101 13 | 102 14 | 103 15 | 103 16 | 1

我正在使用sqlserver,我有两个表,其中包含以下数据。我需要选择那些不重复的匹配行

表A:

A_ID | Item_ID
--------------------
1    | 101
2    | 101
3    | 103
4    | 103
5    | 199
表B:

B_ID | Item_ID
--------------------
11    | 101
12    | 101
13    | 102
14    | 103
15    | 103
16    | 103
预期结果:

A_ID | Item_ID | B_ID
----------------------
1    | 101     | 11
2    | 101     | 12
3    | 103     | 14
4    | 103     | 15
我试过:

SELECT A_ID, a.Item_ID, B_ID FROM Table_A a LEFT JOIN
Table_B b ON a.Item_ID = b.Item_ID
但它显示了所有可能的记录


如何显示上面的预期结果?

根据您给出的结果集,您希望B为每个A提供一条唯一的记录,忽略A中没有相应记录的B中的记录。以下操作将起作用:

SELECT
    AValues.A_ID,
    AValues.Item_ID,
    BValues.B_ID
FROM
(SELECT
    A_ID,
    Item_ID,
    ROW_NUMBER() OVER(PARTITION BY Item_ID ORDER BY A_ID) ARowID
FROM    
    Table_A) AValues
INNER JOIN (SELECT
    B_ID,
    Item_ID,
    ROW_NUMBER() OVER(PARTITION BY Item_ID ORDER BY B_ID) BRowID
FROM
    Table_B) BValues ON AValues.Item_ID = BValues.Item_ID AND AValues.ARowID = BValues.BRowID

这对我来说没什么意义。。。例如,为什么要省略,
B_ID=16
?@mostymostatacho我试图显示基于表A的所有记录,正如您所看到的,表A包含2条带103的记录,因此预期结果应该只显示2条带项目_id103的记录。是的,我得到了该部分。但是,我不知道您选择了什么标准来保留结果中的
14
15
,而不是
16
。顺便说一句,在你现在编辑之后,我不明白你为什么要删掉
199
。。。有一个左连接来保持它