Sql 完全外部联接重复结果
你好 这可能看起来很长(但这是我展示的数据),我有两个表。TestA和TestB。TestA有两列(INT,VARCHAR(32)),分别称为RowNumber和InvoiceNumber。以下结果是:从TestA中选择RowNumber、InvoiceNumberSql 完全外部联接重复结果,sql,Sql,你好 这可能看起来很长(但这是我展示的数据),我有两个表。TestA和TestB。TestA有两列(INT,VARCHAR(32)),分别称为RowNumber和InvoiceNumber。以下结果是:从TestA中选择RowNumber、InvoiceNumber 1 GB01530111600236 2 GB01530111600236 3 GB01530111600236 1 GB01530121600001 2 GB01530121600001 TestB的相同之处
1 GB01530111600236
2 GB01530111600236
3 GB01530111600236
1 GB01530121600001
2 GB01530121600001
TestB的相同之处在于有两个同名的列
1 GB01530111600236
1 GB01530121600001
2 GB01530121600001
3 GB01530121600001
4 GB01530121600001
5 GB01530121600001
6 GB01530121600001
7 GB01530121600001
8 GB01530121600001
9 GB01530121600001
10 GB01530121600001
11 GB01530121600001
12 GB01530121600001
我对完全外部联接的理解是,它将根据JOIN和WHERE子句匹配两个表中的所有行。原因是表A可以有一个或多个发票号,表B也可以有一个或多个发票号
因此,从TestA中,有三个发票号为“GB01530111600236”,在TestB中有一个发票号为“GB01530111600236”。此外,TestB中有12个发票号为“GB01530121600001”,TestA中有两个发票号为“GB01530121600001”,所以我想得到的是:
[ Table A ] [ Table B ]
1 GB01530111600236 1 G01530111600236
2 GB01530111600236 1 G01530111600236
3 GB01530111600236 1 G01530111600236
1 GB01530121600001 1 GB01530121600001
2 GB01530121600001 2 GB01530121600001
1 GB01530121600001 3 GB01530121600001
1 GB01530121600001 4 GB01530121600001
1 GB01530121600001 5 GB01530121600001
1 GB01530121600001 6 GB01530121600001
1 GB01530121600001 7 GB01530121600001
1 GB01530121600001 8 GB01530121600001
1 GB01530121600001 9 GB01530121600001
1 GB01530121600001 10 GB01530121600001
1 GB01530121600001 11 GB01530121600001
1 GB01530121600001 12 GB01530121600001
我的问题是:
SELECT A.RowNumber, B.RowNumber, A.InvoiceNumber, B.InvoiceNumber
FROM TestA A
FULL OUTER JOIN TestB B ON A.InvoiceNumber = B.InvoiceNumber
这个查询是正确的一半,因为它为“GB01530111600236”提供了正确的输出。简略版仅显示1-5,而不是1-12
1 GB01530111600236 1 GB01530111600236
2 GB01530111600236 1 GB01530111600236
3 GB01530111600236 1 GB01530111600236
1 GB01530121600001 1 GB01530121600001
1 GB01530121600001 2 GB01530121600001
1 GB01530121600001 3 GB01530121600001
1 GB01530121600001 4 GB01530121600001
1 GB01530121600001 5 GB01530121600001
2 GB01530121600001 1 GB01530121600001
2 GB01530121600001 2 GB01530121600001
2 GB01530121600001 3 GB01530121600001
2 GB01530121600001 4 GB01530121600001
2 GB01530121600001 5 GB01530121600001
但对于第二张发票编号“GB01530121600001”,它给了我副本。我怎样才能去掉那些重复的
蒂亚
coson我不遵循结果集的逻辑。但是,以下内容应给出相同的结果:
SELECT COALESCE(A.RowNumber, 1),
COALESCE(B.RowNumber, 1),
COALESCE(A.InvoiceNumber, B.InvoiceNumber),
COALESCE(A.InvoiceNumber, B.InvoiceNumber)
FROM TestA A FULL OUTER JOIN
TestB B
ON A.InvoiceNumber = B.InvoiceNumber AND
A.RowNumber = B.RowNumber;
你说的复制品是什么意思?您得到的输出与您要查找的输出类似。除了您试图生成的表外,ID显示为1,2,1,1,1,1,1,1,。。。。在表A中,以001结尾的ID对我来说没有意义。你能解释一下逻辑吗?你用的是什么数据库?(“sql”不足以告诉我们有哪些解决方案可供选择)@Used_By_已经,我正在使用sql Server,请始终将其添加为标记。。。。我们不是千里眼谢谢你。这正是我想要的。简言之,我想要的是,我可以在任何一张表中有一张或多张发票。我希望两张表都有发票的每一个组合。希望这是有意义的。