我有2个mysql表,即'properties'和'images'。
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 |
+---------+---------------+---------------+
它们具有一对多的关系,而images表具有属性表的外键。我想执行一个选择属性的查询,然后选择属性的单个图像。 我正在尝试使用的查询是
SELECT * FROM properties p
JOIN (SELECT * FROM images im LIMIT 1)
ON im.propertyId = p.propertyId;
虽然不行。它也不会返回错误。
答案 0 :(得分:1)
如果要返回所有行,您的查询将变为:
SELECT * FROM properties p
JOIN images im
ON im.propertyId = p.propertyId;
使用LIMIT 1
只会从图片表中返回一行,因此您对行有限制
修改强>
评论后:
通过这种方式,您将获得与您的财产相关联的第一张图片。
SELECT p.*,
(SELECT im.mage
FROM images im
WHERE im.propertyId = p.propertyId
AND NOT EXISTS (
SELECT 'NEXT'
FROM images im2
WHERE im.propertyId = im2.propertyId
AND im2.imageId > im.imageId)
)
FROM properties p;
答案 1 :(得分:0)
尝试以下查询,
SELECT * FROM properties p
JOIN images im
ON im.propertyId = p.propertyId
where p.propertyTitle = '1 acre land'
LIMIT 1
答案 2 :(得分:0)
我们可以使用两个连接来处理这个问题。首先,如您在问题中所怀疑的那样将属性表连接到images表。然后,再做一个加入子查询,找到每个属性的第一个图像。
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;