我正在使用MySql。
我有2个表,一个是主键propertyId的名称和数据列表。
表2包含具有主键propertyImageId的图像。
每个propertyId可能有多个图像或NO图像。
我需要获取属于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
但是,如果存在图像,它只返回propertyId。无论property_images是否存在,我能做什么才能从属性返回所有propertyId?
一直在努力,任何帮助将深表感谢。谢谢!!
答案 0 :(得分:2)
您可以如下重写您的查询,内部查询获取具有最高创建列值的每个属性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