将2个表合并为完整

时间:2016-07-22 12:18:47

标签: mysql

假设我有以下2个表

id| price            id| qty
1 | 1000             1 | 0.5
2 | 1020             3 | 1
3 | 1040             6 | 1.5
4 | 1050
5 | 1070
6 | 1090

对于结果,我想使用最后一个可用的数量来计算每个值

id| price| qty | value (qty * price)
1 | 1000 | 0.5 | 500
2 | 1020 | 0.5 | 510         
3 | 1040 | 1   | 1040    
4 | 1050 | 1   | 1050
5 | 1070 | 1   | 1070
6 | 1090 | 1.5 | 1635

我找不到办法做到这一点。你能帮我吗 ?

2 个答案:

答案 0 :(得分:2)

这只是使用join的问题,但是你不会得到你正在寻找的确切结果,因为你的第二个表中没有完整的值集。

SELECT id, price, qty, qty*price as value from qtys LEFT JOIN prices on id

INNER JOIN也可以。

SELECT id, price, qty, qty*price as value from qtys INNER JOIN prices on id

这会产生这样的结果:

id| price| qty | value (qty * price)
1 | 1000 | 0.5 | 500        
3 | 1040 | 1   | 1040    
6 | 1090 | 1.5 | 1635

无法连接ID 2,4和5.为了产生精确的输出,您必须为缺失项目的数量插值一些值。但是,对于某些缺失值,您似乎期望为0.5,对于另一个,您似乎期望为1.0。

  

SQL JOIN子句用于组合来自两个或多个表的行,   基于他们之间的共同领域。

     

最常见的连接类型是:SQL INNER JOIN(简单连接)。一个SQL   INNER JOIN返回连接的多个表中的所有行   条件得到满足。

来源:http://www.w3schools.com/sql/sql_join.asp

答案 1 :(得分:1)

您可以使用相关子查询来查找qty值,然后查看聚合:

select id, price, qty, qty * price as value
from (select t1.*,
             (select t2.qty
              from t2
              where t2.id <= t1.id
              order by t2.id desc
              limit 1
             ) as qty
      from t1
     ) t;