Mysql 将单行连接到查询

Mysql 将单行连接到查询,mysql,Mysql,我需要从另一个表中获取一个值,但是如果有5/6的结果,我只需要显示最新的结果。我尝试了以下方法: SELECT s.Mileage , s.PurchasePrice , v.make , v.model , v.vrm , c.CleanLive FROM StockBook s LEFT JOIN Vehicles v ON v.VehicleID = s.VehicleID LEFT JOIN CapVal

我需要从另一个表中获取一个值,但是如果有5/6的结果,我只需要显示最新的结果。我尝试了以下方法:

SELECT s.Mileage
     , s.PurchasePrice
     , v.make
     , v.model
     , v.vrm
     , c.CleanLive 
  FROM StockBook s
  LEFT 
  JOIN Vehicles v
    ON v.VehicleID = s.VehicleID
  LEFT 
  JOIN CapVals c
    ON c.LeadID = (SELECT C1.CleanLive 
                   FROM CapVals C1
                  WHERE s.LeadID = c.LeadID
                  ORDER 
                     BY C1.Date 
                  LIMIT 1
                ) 
 ORDER 
    BY StockBookID
它用作查询,但不显示CleanLive值

我在这里设置了一个示例数据集和DB FIDLE:

CREATE TABLE `Vehicles` (
  `VehicleID` int(11) NOT NULL,
  `vrm` varchar(15) NOT NULL,
  `make` varchar(40) NOT NULL,
  `model` varchar(40) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `StockBook` (
  `StockBookID` int(11) NOT NULL,
  `VehicleID` int(11) NOT NULL,
  `LeadID` int(11) NOT NULL,
  `Mileage` int(11) NOT NULL,
  `PurchasePrice` decimal(15,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `CapVals` (
  `CapValsID` int(11) NOT NULL,
  `LeadID` int(11) DEFAULT NULL,
  `CleanLive` int(11) DEFAULT NULL,
  `Date` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `Vehicles` (`VehicleID`, `vrm`, `make`, `model`) VALUES
(1, 'M900WRD', 'Vauxhall', 'Signum');

INSERT INTO `StockBook` (`StockBookID`, `LeadID`, `VehicleID`, `Mileage`, `PurchasePrice`) VALUES
(1, 1, 1, 17000, 15000.00);

INSERT INTO `CapVals` (`CapValsID`, `LeadID`, `CleanLive`, `Date`) VALUES
(6455, 1, 1540, '2019-12-04 15:02:29'),
(6456, 1, 1540, '2019-12-04 15:02:29'),
(6457, 1, 1540, '2019-12-04 15:02:29');

使用行数概念,这将避免重复的行,并为您提供最近的行

你可以试试这个

SELECT Stock.Mileage, Stock.PurchasePrice, Vehi.make, Vehi.model, Vehi.vrm,
(SELECT CleanLive from CapVals a WHERE a.LeadID = Stock.LeadID ORDER BY  DATE DESC LIMIT 1) AS CleanLive
FROM StockBook Stock
LEFT JOIN Vehicles Vehi
ON Stock.VehicleID=Vehi.VehicleID
ORDER BY StockBookID

每个表中只有一行,所以整个限制似乎有点毫无意义。编辑的版本很有魅力。非常感谢@Thushan
SELECT Stock.Mileage, Stock.PurchasePrice, Vehi.make, Vehi.model, Vehi.vrm,
(SELECT CleanLive from CapVals a WHERE a.LeadID = Stock.LeadID ORDER BY  DATE DESC LIMIT 1) AS CleanLive
FROM StockBook Stock
LEFT JOIN Vehicles Vehi
ON Stock.VehicleID=Vehi.VehicleID
ORDER BY StockBookID
SELECT v.vehicleID 
     , v.vrm     
     , v.make     
     , v.model  
     , s.stockbookid
     , s.leadid
     , s.mileage 
     , s.purchaseprice 
     , c.capvalsid
     , c.cleanlive 
     , c.date               
  FROM vehicles v 
  JOIN stockbook s 
    ON s.vehicleid = v.vehicleid 
  JOIN capvals c 
    ON c.leadid = s.leadid
  JOIN 
     ( SELECT leadid,MAX(capvalsid) capvalsid FROM capvals GROUP BY leadid ) x
    ON x.leadid = c.leadid 
   AND x.capvalsid = c.capvalsid;
+-----------+---------+----------+--------+-------------+--------+---------+---------------+-----------+-----------+---------------------+
| vehicleID | vrm     | make     | model  | stockbookid | leadid | mileage | purchaseprice | capvalsid | cleanlive | date                |
+-----------+---------+----------+--------+-------------+--------+---------+---------------+-----------+-----------+---------------------+
|         1 | M900WRD | Vauxhall | Signum |           1 |      1 |   17000 |      15000.00 |      6457 |      1540 | 2019-12-04 15:02:29 |
+-----------+---------+----------+--------+-------------+--------+---------+---------------+-----------+-----------+---------------------+