返回第一个表中的所有数据,如果存在,则返回第二个表中的 1 个数据
Posted
技术标签:
【中文标题】返回第一个表中的所有数据,如果存在,则返回第二个表中的 1 个数据【英文标题】:Return all data from 1st Table, and only 1 data from 2nd Table if exist 【发布时间】:2018-05-14 12:10:30 【问题描述】:我正在使用 mysql。
我有 2 个表,一个是名称和数据的列表,主键为 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。无论property_images是否存在,我该怎么做才能从属性中返回所有propertyId?
一直致力于此,任何帮助将不胜感激。谢谢!!
【问题讨论】:
【参考方案1】:您可以如下重写您的查询,内部查询为每个属性 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_images 表 i 都使用字段名称“propertyId”,结果集在图像不存在时将 propertyId 返回为 NULL。 我通过从 property_images 中单独选择字段而不指定 propertyId 来解决此问题,因此 null 不会覆盖属性表中的 propertyId。非常感谢您的解决方案!以上是关于返回第一个表中的所有数据,如果存在,则返回第二个表中的 1 个数据的主要内容,如果未能解决你的问题,请参考以下文章
sql server 2000返回在第一个表中但不在第二个表中的数据
LEFT JOIN,如果存在第二个表的结果,则添加到 PHP 中的数组