我有以下查询:
SELECT picture.id
FROM app_instagram_picture_category category
INNER JOIN app_instagram_shop_picture picture ON category.picture_id = picture.id
INNER JOIN app_instagram_shop shop ON shop.id = picture.shop_id
WHERE category.first_level_category_id =10
AND shop.isLocked =0
AND shop.expirydate IS NOT NULL
AND shop.expirydate > '2014-05-20'
AND shop.owner_id IS NOT NULL
LIMIT 0, 10;
我想获得 10 个唯一的 picture.id,每个都来自不同/不同的商店,我该怎么做?我应该使用 GROUP BY 吗?如果是怎么办?
为了澄清这个问题,让我这样说:
假设我有 10 家商店,A、B、C、D、E、F、G、H、I、J。我想从这些商店中的每家获得 1 张图片,所以总共 10 张图片,每张图片属于不同的商店
最佳答案
shop.id和picture.id有什么关系?看起来一个商店行可以链接到许多图片行。如果是这样,就没有直接的方式说“对于每个商店,只选择一张图片”。从逻辑上考虑:该语句应该如何在同一家商店的不同图片之间做出决定?是任意的吗?
我不得不建立一个声明(用于报告),我想从一对多关系中选择一行,我选择哪一个并不重要,所以我通过选择来做到这一点可用结果中的 max
主键
SELECT picture.id, shop.id
FROM app_instagram_shop shop
INNER JOIN (select * from app_instagram_shop_picture p where p.id =
(select max(p.id) from app_instagram_shop_picture subp where p.shop_id = subp.shop_id)
) picture ON (shop.id = picture.shop_id)
INNER JOIN app_instagram_picture_category category ON (category.picture_id = picture.id)
WHERE category.first_level_category_id =10
AND shop.isLocked =0
AND shop.expirydate IS NOT NULL
AND shop.expirydate > '2014-05-20'
AND shop.owner_id IS NOT NULL
如果我对您尝试做的事情或您的表之间的关系有误,请纠正我。
编辑:我看到更多你正在尝试做的事情。试试这个:
SELECT picture.id, shop.id
FROM app_instagram_shop shop
INNER JOIN (
select * from app_instagram_shop_picture p LIMIT 0,10
) picture ON (shop.id = picture.shop_id)
INNER JOIN app_instagram_picture_category category ON (category.picture_id = picture.id)
WHERE category.first_level_category_id =10
AND shop.isLocked =0
AND shop.expirydate IS NOT NULL
AND shop.expirydate > '2014-05-20'
AND shop.owner_id IS NOT NULL
关于mysql - 从不同的内部连接表中选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23749041/