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

0

UNION ALL の代わりに UNION を使用します - 遅くなりますが、重複を考慮して削除します。MSDN ドキュメントを参照してください: http://msdn.microsoft.com/en-us/library/office/bb208962(v=office.12).aspx

デフォルトでは、UNION 操作を使用しても重複レコードは返されません。ただし、すべてのレコードが確実に返されるように、ALL 述語を含めることができます。これにより、クエリの実行も高速になります。

Oracle や MSSQL でも同様です。

于 2013-05-12T05:44:38.733 に答える