【发布时间】:2020-03-13 10:00:17
【问题描述】:
我正在尝试创建一个有条件地从多个表中提取数据的 SQL 查询。
我有四张桌子:
订单
+------+------------+------------+
| id | date_added | currency |
+------+------------+------------+
| 1 | 2018-07-23 | 1 |
+------+------------+------------+
order_items
+------+------------+------------+---------------+---------------+
| id | order_id | price | product_id | product_type |
+------+------------+------------+---------------+---------------+
| 1 | 1 | 100.00 | 1 | ticket |
+------+------------+------------+---------------+---------------+
订单数据
+------+--------------+---------------+
| id | order_id | ext_order_ref |
+------+--------------+---------------+
| 1 | 1 | ABC |
+------+--------------+---------------+
产品
+------+------------+------------+
| id | date | product_id |
+------+------------+------------+
| 1 | 2020-03-12 | 1 |
+------+------------+------------+
| 2 | 2020-03-18 | 2 |
+------+------------+------------+
| 3 | 2020-03-20 | 3 |
+------+------------+------------+
我需要输出满足以下条件的订单:
- 一行中的每个订单都有总计(根据具有匹配订单 ID 的订单商品计算)
- order_data 表中与该订单匹配的“ext_order_ref”
- 仅包含具有特定产品类型的订单商品
- 仅包含特定日期范围内产品的订单
首选输出如下所示:
+------------+------------+--------------+
| order_id | total | ext_order_ref|
+------------+------------+--------------+
| 1 | 100 | ABC |
+------------+------------+--------------+
我目前的查询基本上是这样的;请指教
SELECT
orders.id as order_id,
SUM(order_items.price) as total,
order_data.ext_order_ref
FROM orders
INNER JOIN order_data
ON orders.id = order_data.ext_order_ref
RIGHT JOIN order_items
ON orders.id = order_items.order_id
LEFT JOIN products
ON order_items.product_id = products.product_id
WHERE order_items.product_type = 'ticket' AND products.date BETWEEN '2020-03-12' AND '2020-03-18'
GROUP BY orders.id
它几乎可以工作,但并不完全。特别是日期引起了问题。
提前致谢!
【问题讨论】:
-
尝试在
products.date BETWEEN '2020-03-12' AND '2020-03-18'周围加上括号 -
ext_order_id= 1?或ABC -
日期导致什么问题?这里没有问题陈述!!
-
将其更新为 _ref 以便清楚它是外部提供的字符串,而不是主键
-
在包含日期语句之前一切正常,返回零结果。我是 SQL 新手,所以即使这有效,我还是想在这里问一下,以防有更好的方法我还不知道;即使有积极的结果:这就是我问这个问题的原因。