Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 仅选择具有SQL连接的数据的最新版本_Mysql_Sql - Fatal编程技术网

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