Mysql 将两个表合并为完整的

Mysql 将两个表合并为完整的,mysql,Mysql,假设我有下面两张表 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 |

假设我有下面两张表

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

我找不到办法。你能帮忙吗

只需使用一个参数,但您将无法获得所需的确切结果,因为您的第二个表中没有项目的完整值集

SELECT id, price, qty, qty*price as value from qtys LEFT JOIN prices on id
内部联接也可以

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内部联接简单联接。SQL语句 内部联接返回联接所在的多个表中的所有行 条件满足


来源:

您可以使用相关子查询查找数量值,然后使用聚合:

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;

我理解答案,但不理解投票结果。第一个查询将返回一组空值。第二个将返回3行。@GordonLinoff oops,西部最快的枪对我的回应:希望编辑能挽救它,但如果你认为答案值得删除,会很高兴地删除它。不,编辑并没有改善答案,因为OP的问题是围绕的。