mysql - 从不同的内部连接表中选择值

标签 mysql sql

我有以下查询:

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/

相关文章:

php - 让 PHP 解析大文件是否比从 MySQL 数据库调用数据更快?

mysql - (以今天计算)减去(以前一天计算)持续 1 个月

mysql - 比较 MySQL 中的 TIMEDIFF

mysql - 将这两个查询合二为一的正确方法是什么?

php - 密码 "salts"——我做对了吗?

Java:插入表日期时间数据

sql - 我怎样才能加快这个更新和设置?

sql - 衡量 SQL 语句的复杂性

mysql - 仅选择具有特定值的最新行

php - 创建url而不是表单操作(例如wordpress slug而不是pageid)