Ms access 解决联合查询的困难

Ms access 解决联合查询的困难,ms-access,Ms Access,我有两张桌子: S_tbl K_tbl 我运行以下查询: SELECT K_Tbl.id, K_Tbl.barcode, K_Tbl.Qty, K_Tbl.NewQty FROM K_Tbl where K_Tbl.id = 1 UNION ALL SELECT S_Tbl.id, S_Tbl.barcode, S_Tbl.Qty, '0' as NewQty FROM S_Tbl where S_Tbl.id = 1 我明白了: ===========================

我有两张桌子:

S_tbl

K_tbl

我运行以下查询:

SELECT K_Tbl.id, K_Tbl.barcode, K_Tbl.Qty, K_Tbl.NewQty
FROM   K_Tbl where K_Tbl.id = 1
UNION ALL
SELECT S_Tbl.id, S_Tbl.barcode, S_Tbl.Qty, '0' as NewQty
FROM   S_Tbl where S_Tbl.id = 1
我明白了:

=============================
id | barcode | qty | newQty |
=============================
1 | 1234      | 10 | 20     |
1 | 1234      | 10 | 20     |
1 | 1234      | 10 | 0      |
1 | 111       | 5  | 0      |
如何合并结果如下所示的相同行:

=============================
id | barcode | qty | newQty |
=============================
1 | 1234     | 10  | 20     |
1 | 1234     | 10  | 20     |
1 | 111      | 5   | 0      |
编辑:

我把这一行加上:
1 | 1234 | 10 |
S|Tbl

我需要在查询中更改的内容:

SELECT K_Tbl.id, K_Tbl.barcode, K_Tbl.Qty, K_Tbl.NewQty
FROM K_Tbl where K_Tbl.id = 1
UNION
SELECT S_Tbl.id, S_Tbl.barcode, S_Tbl.Qty, K_Tbl.NewQty
FROM S_Tbl 
left join K_Tbl on S_Tbl.id=K_Tbl.id and S_Tbl.barcode=K_Tbl.barcode
where S_Tbl.id = 1
我等着瞧

=============================
id | barcode | qty | newQty |
=============================
1 | 1234     | 10  | 20     |
1 | 1234     | 10  | 20     |
1 | 111      | 5   | 0      |
现在我明白了:

=============================
id | barcode | qty | newQty |
=============================
1 | 1234     | 10  | 20     |
1 | 111      | 5   | 0      |

使用UNION而不是UNION ALL-较慢,但会关心重复项并将其删除。请参阅MSDN文件:

默认情况下,使用联合时不会返回重复记录 活动但是,您可以包含ALL谓词以确保 将返回所有记录。这也使查询运行得更快


在Oracle或MSSQL中也是如此。

使用UNION而不是UNION—速度较慢,但会关心重复项并将其删除。请参阅MSDN文件:

SELECT K_Tbl.id, K_Tbl.barcode, K_Tbl.Qty, K_Tbl.NewQty
FROM K_Tbl where K_Tbl.id = 1
UNION
SELECT S_Tbl.id, S_Tbl.barcode, S_Tbl.Qty, K_Tbl.NewQty
FROM S_Tbl 
left join K_Tbl on S_Tbl.id=K_Tbl.id and S_Tbl.barcode=K_Tbl.barcode
where S_Tbl.id = 1
默认情况下,使用联合时不会返回重复记录 活动但是,您可以包含ALL谓词以确保 将返回所有记录。这也使查询运行得更快

在Oracle或MSSQL中也是如此

SELECT K_Tbl.id, K_Tbl.barcode, K_Tbl.Qty, K_Tbl.NewQty
FROM K_Tbl where K_Tbl.id = 1
UNION
SELECT S_Tbl.id, S_Tbl.barcode, S_Tbl.Qty, K_Tbl.NewQty
FROM S_Tbl 
left join K_Tbl on S_Tbl.id=K_Tbl.id and S_Tbl.barcode=K_Tbl.barcode
where S_Tbl.id = 1

我确信此查询将在MS-ACCES中运行


我确信此查询将从
MS-ACCES

@Gold
选择S_Tbl.id、S_Tbl.barcode、S_Tbl.Qty、NZ(K_Tbl.NewQty,0)从S_Tbl左起加入S_Tbl.id=K_Tbl.id和S_Tbl.barcode=K_Tbl.barcode,其中S_Tbl.id=1
server@Gold请验证以上查询并回复。谢谢您的帮助,但是我有太多的行。。。我要重新开始Cluster@Gold
选择S_Tbl.id、S_Tbl.barcode、S_Tbl.Qty、NZ(K_Tbl.NewQty,0)从S_Tbl左侧加入S_Tbl.id=K_Tbl.id和S_Tbl.barcode=K_Tbl.barcode,其中S_Tbl.id=1server@Gold请验证以上查询并回复。谢谢您的帮助,但是我得到的行太多了。。。我将开始新的工作
SELECT K_Tbl.id, K_Tbl.barcode, K_Tbl.Qty, K_Tbl.NewQty
FROM K_Tbl where K_Tbl.id = 1
UNION
SELECT S_Tbl.id, S_Tbl.barcode, S_Tbl.Qty, K_Tbl.NewQty
FROM S_Tbl 
left join K_Tbl on S_Tbl.id=K_Tbl.id and S_Tbl.barcode=K_Tbl.barcode
where S_Tbl.id = 1