多个订单到一个收据,select子句没有多余的结果,如何?

时间:2016-08-05 09:30:29

标签: sql sql-server

2表:tb_order,tb_receipt。 3-4份销售订单中的一张收据。但只有具有相同代码的订单,名称才能合并为一个收据。 所以我想编写一个select子句来选择tb_receipt和name中的大多数字段,来自tb_order的代码,但是使用inner join只会产生多余的结果,我该如何处理呢?

tb_order: receiptid, name, code, product, total

tb_receipt: receiptid, sum

我只能想到加入:

   select a.sum, b.code, b.name from tb_reciept a inner join tb_order b on a.receiptid = b.receiptid

但是这会给我多余的结果,因为一张收据可能会有几个顺序。

示例数据:tb_order:

receiptid   code   name   total

201601      001  iphone5  100

201601      001  iphone5  500

201601      001  iphone5  300

tb_receipt:

receiptid  sum

201601     900

期望:

receiptid  code  name      sum

201601     001   iphone5   900

1 个答案:

答案 0 :(得分:0)

假设您有外键tb_order.receipt_id从tb_order到tb_receipt的引用,您可以使用

select distinct tb_receipt.*, tb_order.code, tb_order.name
from tb_receipt inner join tb_order on tb_order.receipt_id = tb_receipt.id
where <...>

或更有效

select tb_receipt.*, o.code, o.name
from tb_receipt inner join (
  select distinct code, name, receipt_id from tb_order where <...>
) as o on o.receipt_id = tb_receipt.id
相关问题