小编irr*_*ons的帖子

通过连接表数据进行排序的复杂 SQL 查询

这是尽可能简化的示例数据:

Table: items (id / manufacturer)
1 / Microsoft
2 / Microsoft
3 / Microsoft
4 / ACME
5 / Microsoft

Table: order_rows (item_id / date)
1 / 2012-12-01
1 / 2013-01-01
2 / 2013-01-02
2 / 2013-01-03
3 / 2013-01-04
3 / 2013-01-05
3 / 2013-01-06
Run Code Online (Sandbox Code Playgroud)

我想要一份 Microsoft 的所有商品的列表,按自 2013 年 1 月 1 日以来的购买数量排序。

因此,在 order_rows 中日期 > 2013-01-01 的条目最多的 Microsoft 项目将排在第一位。自 2013 年 1 月 1 日起所有零购买的商品将位于底部(不排除在列表之外)。

这可以通过单个查询来完成吗?另外,这会不会太贵而不实用?

所需输出的顺序如下:3、2、1、5

sql join group-by sql-order-by

5
推荐指数
1
解决办法
8858
查看次数

SQL Join包括表a中的行,表b中没有匹配项

SELECT orders.* FROM orders JOIN order_rows 
  ON orders.id = order_rows.order_id 
  WHERE order_rows.quant <> order_rows.quant_fulfilled 
  GROUP BY orders.id 
  ORDER BY orders.id DESC
Run Code Online (Sandbox Code Playgroud)

我需要这个包含没有相应order_row条目的行(这将是一个尚未包含任何项目的订单).似乎必须通过添加ON或WHERE子句来实现此目的吗?

在给定时间只会有几个空订单,所以如果对此的最佳答案会显着降低性能,我会使用单独的查询.但我希望将它们包含在此查询中,以便按order.id和其他查询对它们进行排序.只是不想将查询时间加倍,只包括没有项目的1-3个订单.

我正在使用MySQL.提前感谢任何建议.

mysql sql join inner-join

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

join ×2

sql ×2

group-by ×1

inner-join ×1

mysql ×1

sql-order-by ×1