如果第二个表存在,则只返回第二个表中的一条数据,同时返回第一个表中的所有数据。

3

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

然而,它仅在存在图像时返回propertyId。我该怎么做才能使其返回所有的propertyId,而不管property_images是否存在?

一直在努力解决这个问题,非常感谢任何帮助。谢谢!

1个回答

3
您可以将查询重写为以下形式,内部查询获取每个属性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 

非常感谢!看起来它正在工作,除了一个问题:由于property table和property_images table都使用了字段名"propertyId",当图片不存在时,结果集返回的propertyId为NULL。 - Someone Special
我通过逐个选择property_images中的字段而不指定propertyId来解决了这个问题,因此null不会覆盖property表中的propertyId。非常感谢您提供的解决方案! - Someone Special

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接