Mysql 仅选择具有SQL连接的数据的最新版本
我有两张表,一张包含提供信息,另一张包含产品 大概是这样的:Mysql 仅选择具有SQL连接的数据的最新版本,mysql,sql,Mysql,Sql,我有两张表,一张包含提供信息,另一张包含产品 大概是这样的: OFFER PRODUCTS ID Number Version poID offer_id Product how_many ========================== ========================================
OFFER PRODUCTS
ID Number Version poID offer_id Product how_many
========================== ========================================
1 123 1 1 1 Apple 1
2 123 2 2 1 Banana 2
3 124 1 3 1 Orange 1
4 2 Apple 1
5 2 Banana 2
6 2 Orange 2
7 2 Kiwi 1
8 3 Apple 2
9 3 Banana 3
我想列出目前提供的产品数量。
由于报价(id=2)是(id=1)的更新,因此只应计算(id=2)
我应该如何最好地质疑这一点
SELECT *
FROM products
WHERE offer_id = (SELECT MAX(id) FROM offer)
或者,如果您喜欢join语法
SELECT p.*
FROM products p
INNER JOIN (SELECT MAX(id) id FROM offer) o ON p.offer_id = o.id
编辑(在没有看到所需结果的情况下,仍然不能完全确定这是您想要的)
首先,您需要获得所有最新的优惠:
select o.id
from offer o
where version = (select max(version)
from offer o2
where o2.number = o.number);
根据以上内容,您可以获得所有产品:
select p.*
from products p
where offer_id in (select o.id
from offer o
where version = (select max(version)
from offer o2
where o2.number = o.number));
如果
id
和version
相关:
select sum(how_many) from products p
join offer on p.offer_id=offer.id
join (
select number, max(version) version from offer group by number
) x
on offer.id=x.id and offer.version = x.version
试试这个:
select [list columns here]
from products p
join (select offernumber, max(id) as ID from offer group by offernumber) a
on a.id = p.offer_id
如果您需要报价中除报价编号和id以外的其他列:
select [list columns here]
from products p
join (select offernumber, max(id) as ID from offer group by offernumber) a
on a.id = p.offer_id
join offer o on o.id = a.id
这将不会返回所需的结果。您的子查询没有生成正确的结果,他正在使用
MAX(version)
查找id
,可能是我看错了问题,但据我所知,OP需要提供id=3的所有产品。我想这可以解释为,他想要的是3号报价中的苹果和香蕉,2号报价中的猕猴桃和橘子,如果你是对的,那么它就不会退回……不,他想要的是报价为2,3的产品,你能发布想要的结果吗。。问题是令人困惑的。只有当具有更高vesion编号的报价保证具有更高的id时,这才起作用。通常会给出此类约束。不过我更新了答案
select [list columns here]
from products p
join (select offernumber, max(id) as ID from offer group by offernumber) a
on a.id = p.offer_id
join offer o on o.id = a.id