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
答案 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