Mysql 需要将2个查询合并为1个查询
我想将这2个查询合并为1个查询。有人能帮我吗 问题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
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