1

我有 2 张桌子:

S_tbl

====================
id | barcode | qty |
====================
1 | 1234     | 10  |
1 | 111      | 5   |
1 | 1234     | 10  |

K_tbl

=============================
id | barcode | qty | newQty |
=============================
1  | 1234    | 10  | 20     |

我运行这个查询:

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      |
4

2 回答 2

1
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

SQL 小提琴

我相信这个查询将从MS-ACCES

于 2013-05-12T05:54:45.583 回答
0

使用 UNION 而不是 UNION ALL - 速度较慢,但​​会关心重复项并删除它们。参考 MSDN 文档: http: //msdn.microsoft.com/en-us/library/office/bb208962 (v=office.12).aspx

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

在 Oracle 或 MSSQL 中也是如此。

于 2013-05-12T05:44:38.733 回答