我有2个mysql表,即“属性”和“图像”。
Properties
+------------+---------------+
| propertyId | propertyTitle |
+------------+---------------+
| 1 | 1 acre land |
| 2 | 2 acre land |
| 3 | 3 acre land |
+------------+---------------+
Images
+---------+---------------+---------------+
| imageId | image | propertyId |
+---------+---------------+---------------+
| 1 | land.jpeg | 1 |
| 2 | landview.jpg | 1 |
| 3 | viewland.jpeg | 2 |
+---------+---------------+---------------+
它们具有一对多的关系,图像表具有属性表的外键。我想执行一个查询,该查询选择一个属性,然后选择该属性的单个图像。
我正在尝试使用的查询是
SELECT * FROM properties p
JOIN (SELECT * FROM images im LIMIT 1)
ON im.propertyId = p.propertyId;
它不起作用。它也不返回错误。
最佳答案
我们可以使用两个联接来解决此问题。首先,如您在问题中怀疑的那样,将属性表加入到图像表。然后,执行其他操作以加入子查询,该子查询为每个属性找到第一个图像。
SELECT
p.propertyId,
p.propertyTitle,
i1.image
FROM properties p
INNER JOIN images i1
ON p.propertyId = i1.propertyId
INNER JOIN
(
SELECT propertyId, MIN(imageId) AS min_imageId
FROM images
GROUP BY propertyId
) i2
ON i1.propertyId = i2.propertyId AND
i1.imageId = t2.min_imageId;