【问题标题】:MySQL Query to get individual item from another tableMySQL查询从另一个表中获取单个项目
【发布时间】:2017-01-30 23:13:16
【问题描述】:

我有两张桌子 - 1. 饲料 2. 卖家

Feed 表是这样的

seller_id       item_id     end_date
=========       =======     =========
1               1           2017-02-12[A future date]
1               2           2017-03-12[A future date]
1               3           2017-01-12[A past date]
2               12          2017-02-12[A future date]
3               123         2017-01-10[A past date]

卖家表是这样的

seller_id
=========
1
2
3

我喜欢得到这样的结果,其中 end_date 大于或等于当前日期,我只需要一个 item_id 为每个 Seller_id-

seller_id       item_id
=========       =======
1               1 or 2
2               12

而我的 SQL 查询就像-

SELECT S.seller_id, R.item_id FROM Feed F, Seller S WHERE S.seller_id=F.seller_id AND F.end_date>=CURDATE() GROUP BY S.seller_id LIMIT 1;

【问题讨论】:

  • feed 上的主键是什么。还有1个或2个???哪个?

标签: mysql


【解决方案1】:

您可以使用min(),或max(),甚至any_value() 聚合函数和group by 子句来为每个卖家选择item_id

SELECT S.seller_id, max(R.item_id)
FROM Feed F
INNER JOIN Seller S on S.seller_id=F.seller_id
WHERE F.end_date>=CURDATE()
GROUP BY S.seller_id

这取决于您确切的业务需求来使用哪个功能。

【讨论】:

    【解决方案2】:

    检查一下..

    SELECT S.seller_id, MAX(R.item_id) AS item_id FROM Feed F,卖家 S WHERE S.seller_id=F.seller_id AND F.end_date>=CURDATE() GROUP BY S.seller_id;

    【讨论】:

      【解决方案3】:

      您只需要表格 Feed,您将在选择结束日期大于当前日期的项目后按 id_seller 分组。然后通过您选择的某个聚合函数(此处为 max() )选择一个唯一的 item_id。这是您的请求的示例:

      SELECT
          F.seller_id,
          max(F.itemid)
      FROM
          Feed F
      WHERE
          F.end_date > CURRENT_DATE
      
      GROUP BY
          F.seller_id
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 2017-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多