Ms access 解决联合查询的困难
我有两张桌子: S_tbl K_tbl 我运行以下查询: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 我明白了: ===========================
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