MYSQL 一对多关系查询从 'many' table 返回单行
MYSQL one to many relationship query returning a single row from 'many' table
我有 2 个 mysql table,即 '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 |
+---------+---------------+---------------+
它们具有一对多关系,并且图像 table 具有属性 table 的外键。我想执行一个选择 属性 的查询,然后选择 属性 的单个图像。
我正在尝试使用的查询是
SELECT * FROM properties p
JOIN (SELECT * FROM images im LIMIT 1)
ON im.propertyId = p.propertyId;
虽然它不起作用。 return 也不是错误。
如果您想要 return 的所有行,您的查询将变为:
SELECT * FROM properties p
JOIN images im
ON im.propertyId = p.propertyId;
使用 LIMIT 1
你 return 你的图像只有一行 table 所以你对你的行有限制
编辑
评论后:
通过这种方式,您将获得链接到您的 属性 的第一张图片。
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;
试试下面的查询,
SELECT * FROM properties p
JOIN images im
ON im.propertyId = p.propertyId
where p.propertyTitle = '1 acre land'
LIMIT 1
我们可以使用两个连接来处理这个问题。首先,如您在问题中所怀疑的那样,将属性 table 加入到图像 table 中。然后,执行附加操作以加入子查询,该子查询为每个 属性.
查找第一张图像
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;
我有 2 个 mysql table,即 '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 |
+---------+---------------+---------------+
它们具有一对多关系,并且图像 table 具有属性 table 的外键。我想执行一个选择 属性 的查询,然后选择 属性 的单个图像。 我正在尝试使用的查询是
SELECT * FROM properties p
JOIN (SELECT * FROM images im LIMIT 1)
ON im.propertyId = p.propertyId;
虽然它不起作用。 return 也不是错误。
如果您想要 return 的所有行,您的查询将变为:
SELECT * FROM properties p
JOIN images im
ON im.propertyId = p.propertyId;
使用 LIMIT 1
你 return 你的图像只有一行 table 所以你对你的行有限制
编辑
评论后:
通过这种方式,您将获得链接到您的 属性 的第一张图片。
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;
试试下面的查询,
SELECT * FROM properties p
JOIN images im
ON im.propertyId = p.propertyId
where p.propertyTitle = '1 acre land'
LIMIT 1
我们可以使用两个连接来处理这个问题。首先,如您在问题中所怀疑的那样,将属性 table 加入到图像 table 中。然后,执行附加操作以加入子查询,该子查询为每个 属性.
查找第一张图像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;