我正在使用MySql。
我有两个表,一个是带有主键propertyId的名称和数据列表。
表2包含具有主键propertyImageId的图像。
每个propertyId可能有多个图像,或者根本没有图像。
我需要得到一个属于agentId=1的所有propertyId的列表,不管它是否有图像。

'SELECT a.*, b.*
FROM property a LEFT OUTER JOIN property_images b
ON a.propertyId = b.propertyId
INNER JOIN
( SELECT propertyId, MAX(created) maxCreated
FROM property_images
GROUP BY propertyId) c
ON b.propertyId = c.propertyId ANd b.created = c.maxCreated
WHERE agentId = 1 ');

我正在尝试这里提供的类似解决方案MySQL INNER JOIN select only one row from second table
但是,如果图像存在,它只返回属性Type。我能做什么,以便它将从属性返回所有的属性ID,不管是否存在PrimyType图像?
一直致力于此,任何帮助都将不胜感激。谢谢您!!

最佳答案

您可以重写查询,如下所示,内部查询使用最高的创建列值为每个属性id获取单个图像

SELECT
  a.*,
  b.*
FROM
  property a
  LEFT JOIN
    (SELECT
      c.*
    FROM
      property_images c
      LEFT JOIN property_images d
        ON c.propertyId = d.propertyId
        AND c.created < d.created
    WHERE d.propertyId IS NULL) b
    ON a.propertyId = b.propertyId
WHERE a.agentId = 1

08-28 19:33