0

我有一张桌子礼物。Gift's 可以通过表关联拥有许多 gift_images。我正在尝试退回具有特定隐私级别的有限 # 件礼物,这些礼物至少有一个 gift_images 关联。

本质上,我想返回:gift 条目及其 FIRST 关联的 gift_image(gift_image 应按其具有的位置值排序,位置 1 为 FIRST)。没有关联 gift_image 的礼物应该被忽略。

这就是我所拥有的,但它绝对不起作用。

SELECT gifts.* FROM gifts LEFT JOIN gift_images ON gifts.id = gift_images.gift_id WHERE gifts.privacy = 2 ORDER BY gift_images.position ASC LIMIT 10

有什么帮助吗?

4

1 回答 1

0

如果你想忽略没有图片的礼物,你应该使用 anINNER JOIN而不是LEFT JOIN. 此外,为了使查询有意义,除了来自gift 的字段之外,您还应该从gift_images 中选择一些字段。

如果所有具有礼物图像的礼物都有一个位置 = 1 的图像,则此查询应执行以下操作:

SELECT gifts.*, gift_images.*
FROM gifts
INNER JOIN gift_images
ON gifts.id = gift_images.gift_id
WHERE gifts.privacy = 2
AND gift_images.position = 1
LIMIT 10

否则,您可以尝试

SELECT gifts.*, gift_images.*
FROM gifts
INNER JOIN (SELECT gift_id, MIN(position) AS min_position
            FROM gift_images
            GROUP BY gift_id) AS positions
ON positions.gift_id = gifts.id
INNER JOIN gift_images
ON gift_images.gift_id = gifts.id
AND gift_images.position = positions.min_position
于 2013-02-16T17:12:48.827 回答