返回第一个表中的所有数据,如果存在,则仅返回第二个表中的1个数据

时间:2017-11-30 14:16:24

标签: mysql

我正在使用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?

一直在努力,任何帮助将深表感谢。谢谢!!

1 个答案:

答案 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