Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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 需要将2个查询合并为1个查询_Mysql_Sql - Fatal编程技术网

Mysql 需要将2个查询合并为1个查询

Mysql 需要将2个查询合并为1个查询,mysql,sql,Mysql,Sql,我想将这2个查询合并为1个查询。有人能帮我吗 问题1: SELECT Date_Consommation AS Date_Consommation, Odometre AS Odometre, IDProduits AS IDProduits, IDZ_Consommations_Provenances AS IDZ_Consommations_Provenances, IDEmployes AS IDEmployes, ID

我想将这2个查询合并为1个查询。有人能帮我吗

问题1:

SELECT
    Date_Consommation AS Date_Consommation, 
    Odometre AS Odometre,   
    IDProduits AS IDProduits,   
    IDZ_Consommations_Provenances AS IDZ_Consommations_Provenances, 
    IDEmployes AS IDEmployes,   
    IDFournisseurs AS IDFournisseurs
FROM 
    Consommations
WHERE IDVehicules = 3140
AND Date_Consommation <= '20191114'
ORDER BY Date_Consommation DESC, Odometre DESC
LIMIT 1
以下是示例数据和我想要的结果:


如果您的数据库允许CTE,那么,这将是一种方法。您需要将IDVehicles添加到每个查询的输出中,然后连接IDVehicles上的两个查询。另外,由于您将输出限制为一行,因此不需要order by子句。

我认为可以在C1.IDVehicles=C2.IDVehicles上对同一个表使用交叉连接或内部连接,并选择所需的数据,这是SQL,但没有以任何方式进行测试

SELECT
    C1.Date_Consommation AS Date_Consommation, 
    C1.Odometre AS Odometre,   
    C1.IDProduits AS IDProduits,   
    C1.IDZ_Consommations_Provenances AS IDZ_Consommations_Provenances, 
    C1.IDEmployes AS IDEmployes,   
    C1.IDFournisseurs AS IDFournisseurs
    C2.Odometre AS maxOdo
FROM 
    Consommations C1
    CROSS JOIN Consommations C2 
WHERE C1.IDVehicules = 3140 AND C2.IDVehicules = 3140
    AND C1.Date_Consommation <= '20191114' AND C2.Date_Consommation >= '20191114'
ORDER BY C1.Date_Consommation DESC, C1.Odometre DESC, C2.Date_Consommation, C2.Odometre
LIMIT 1

在你的帮助下,我终于得到了我想要的

SELECT
    bloc1.Date_Consommation,
    bloc1.Odometre,
    bloc1.IDProduits,
    bloc1.IDZ_Consommations_Provenances,
    bloc1.IDEmployes,
    bloc1.IDFournisseurs,
    bloc2.maxOdo
FROM
    (SELECT
        Date_Consommation,
        Odometre,
        IDProduits,
        IDZ_Consommations_Provenances,
        IDEmployes,
        IDFournisseurs
    FROM Consommations
    WHERE IDVehicules = 3140
    AND Date_Consommation <= '20191114'
    ) bloc1,

    (SELECT MAX(Odometre) AS maxOdo
    FROM Consommations
    WHERE IDVehicules = 3140
    AND Date_Consommation >= '20191114'
    ) bloc2

ORDER BY Date_Consommation DESC, Odometre DESC
LIMIT 1

提供样本数据和预期结果。解释你所说的组合查询是什么意思。你应该提供更多关于你所说的组合的解释。如果希望两个结果一个接一个地显示,则可以使用union命令或union all,具体取决于是否需要重复。但这要求两个查询在相同的顺序中具有相同的列名。是否尝试了Union?是的,我尝试过,但总是收到一条错误消息,我无法运行查询。据我所知,我在两个查询中必须有相同的列,而且我也无法正确地将不同于一个查询的order by子句放置到另一个查询中。选择NULL、ODOMETER、NULL、NULL、NULL、NULL、,如果IDVehicles=3140且Date_Consomation>='20191114'按日期排序,里程计限制为1,则从组合中为NULL。您可以使用Union尝试此操作吗?是,查询有效,但不返回任何结果。。。谢谢你的帮助!
SELECT
    C1.Date_Consommation AS Date_Consommation, 
    C1.Odometre AS Odometre,   
    C1.IDProduits AS IDProduits,   
    C1.IDZ_Consommations_Provenances AS IDZ_Consommations_Provenances, 
    C1.IDEmployes AS IDEmployes,   
    C1.IDFournisseurs AS IDFournisseurs
    C2.Odometre AS maxOdo
FROM 
    Consommations C1
    CROSS JOIN Consommations C2 
WHERE C1.IDVehicules = 3140 AND C2.IDVehicules = 3140
    AND C1.Date_Consommation <= '20191114' AND C2.Date_Consommation >= '20191114'
ORDER BY C1.Date_Consommation DESC, C1.Odometre DESC, C2.Date_Consommation, C2.Odometre
LIMIT 1
SELECT
    bloc1.Date_Consommation,
    bloc1.Odometre,
    bloc1.IDProduits,
    bloc1.IDZ_Consommations_Provenances,
    bloc1.IDEmployes,
    bloc1.IDFournisseurs,
    bloc2.maxOdo
FROM
    (SELECT
        Date_Consommation,
        Odometre,
        IDProduits,
        IDZ_Consommations_Provenances,
        IDEmployes,
        IDFournisseurs
    FROM Consommations
    WHERE IDVehicules = 3140
    AND Date_Consommation <= '20191114'
    ) bloc1,

    (SELECT MAX(Odometre) AS maxOdo
    FROM Consommations
    WHERE IDVehicules = 3140
    AND Date_Consommation >= '20191114'
    ) bloc2

ORDER BY Date_Consommation DESC, Odometre DESC
LIMIT 1