Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 完全外部联接重复结果_Sql - Fatal编程技术网

Sql 完全外部联接重复结果

Sql 完全外部联接重复结果,sql,Sql,你好 这可能看起来很长(但这是我展示的数据),我有两个表。TestA和TestB。TestA有两列(INT,VARCHAR(32)),分别称为RowNumber和InvoiceNumber。以下结果是:从TestA中选择RowNumber、InvoiceNumber 1 GB01530111600236 2 GB01530111600236 3 GB01530111600236 1 GB01530121600001 2 GB01530121600001 TestB的相同之处

你好

这可能看起来很长(但这是我展示的数据),我有两个表。TestA和TestB。TestA有两列(INT,VARCHAR(32)),分别称为RowNumber和InvoiceNumber。以下结果是:从TestA中选择RowNumber、InvoiceNumber

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,请始终将其添加为标记。。。。我们不是千里眼谢谢你。这正是我想要的。简言之,我想要的是,我可以在任何一张表中有一张或多张发票。我希望两张表都有发票的每一个组合。希望这是有意义的。