如何从 2 个事务表中获取最大行数。 MySQL

how to get max rows from 2 transactional tables. MySQL

我有两个 mysql 交易 table 和两个查找 table。我想从每个事务性 tables 中获取 select max(id),将结果与查找 tables 合并成一行。到目前为止,我似乎无法找到解决方案。这是我的 tables。股票和价格是交易的,而车辆和模型是查找 tables.

车辆table

 id  name
 1   Toyota
 2   Suzuki

型号table

 id  vehicle_id  name
 1   1           Corolla
 2   2           Swift
 3   1           Prado
 4   2           Vitara

股票table

 id  vehicle_id  model_id  qty
 1   1           1         50
 2   2           2         77
 3   1           1         40
 4   2           2         30

价格table

 id  vehicle_id  model_id  price
 1   1           1         500
 2   2           2         777
 3   1           1         600
 4   2           2         1000

预期结果

 id  vehicle_id  model_id  qty price  vname  mname
 1   1           1         40  600    Toyota Corolla
 2   2           2         30  1000   Suzuki Swift

这是我在无数次尝试中尝试过的

select s.*, b.name vehicle, m.name model, p.price
                                  from stocks s, vehicles b, models m, prices p
                                  where s.id in (select max(id) id from stocks
                                  where s.vehicle_id = b.id and s.model_id = m.id  and s.vehicle_id = p.vehicle_id and s.model_id = p.model_id
                                  group by vehicle_id, model_id)
                                  order by id;

运行 上面的查询没有给我我想要的东西,而且它破坏了 PC。我必须重新启动。我怎样才能达到预期的效果?

如果您使用的是 MySQL 8,则可以使用 window 函数和通用 table 表达式获取最新(基于每辆车和模型组的最大 ID)车辆价格和数量和型号

with pricescte as (select *,
  rank() over (partition by vehicle_id,model_id order by id desc) AS price_rank
from prices),
  stockcte as (select *,
    rank() over (partition by vehicle_id,model_id order by id desc) AS stock_rank
  from stocks)

select v.id,
  v.name,
  m.id as model_id,
  m.name,
  s.qty,
  p.price
from vehicles v
join models m on v.id = m.vehicle_id
join stockcte s on v.id = s.vehicle_id 
    and m.id = s.model_id
join pricescte p on v.id = p.vehicle_id 
    and m.id = p.model_id
where s.stock_rank = 1
    and p.price_rank = 1

DEMO

如果您使用的不是 MySQL < 8 的最新版本,您可以使用

这样的查询
select v.id,
  v.name,
  m.id as model_id,
  m.name,
  s.qty,
  p.price
from vehicles v
join models m on v.id = m.vehicle_id
join (
    select *
    from stocks st
    where id = (
        select max(id)
        from stocks
        where st.vehicle_id =vehicle_id
          and st.model_id = model_id
    )
) s 
    on v.id = s.vehicle_id 
        and m.id = s.model_id
join (
    select *
    from prices pr
    where id = (
        select max(id)
        from prices
        where pr.vehicle_id =vehicle_id
          and pr.model_id = model_id
    )
) p on v.id = p.vehicle_id 
    and m.id = p.model_id

DEMO