【发布时间】:2020-12-22 09:47:58
【问题描述】:
我有这个 MySQL 查询:
SELECT DISTINCT( rentals.order_item_id ), reserved_date, product_id, quantity, order_id FROM `test_rentals` as rentals
INNER JOIN `test_orderitemmeta` as orderitemmeta
WHERE `reserved_date` = '2020-07-07'
AND `product_id` = 109
AND orderitemmeta.meta_key = 'returned'
AND orderitemmeta.meta_value = 'yes'
这会返回:
| order_item_id | reserved_date | product_id | quantity | order_id |
|---|---|---|---|---|
| 134 | 2020-07-07 | 109 | 1 | 274 |
| 138 | 2020-07-07 | 109 | 1 | 276 |
test_orderitemmeta 表包含唯一的meta_id、order_item_id、meta_key 和meta_value,可以有多个具有相同 order_item_id 的行,rentals 表只有 order_item_id 列来加入这些与。
我希望返回单行显示 reserved_date、product_id 和总量,我想我可以使用 SUM( quantity ) 来做到这一点,但这给出了结果:
| order_item_id | reserved_date | product_id | SUM(quantity) | order_id |
|---|---|---|---|---|
| 134 | 2020-07-07 | 109 | 16 | 274 |
我认为这是使用 DISTINCT 之前可用的总行数?
我还考虑过删除DISTINCT( rentals.order_item_id ) 并在查询末尾使用GROUP BY rentals.order_item_id,但这也没有给出我正在寻找的结果。
我怎样才能使结果成为单行,总数量如下:
| reserved_date | product_id | quantity |
|---|---|---|
| 2020-07-07 | 109 | 2 |
【问题讨论】:
-
你能告诉我们你想要的确切结果吗?
-
DISTINCT不是函数,它是SELECT子句的修饰符,它适用于整行(否则没有意义)。另请阅读此答案:stackoverflow.com/a/27945165/4265352 -
不带条件的
JOIN(ON ...) 生成第一个表中的行与第二个表中的行的所有组合。您需要一个条件来仅组合两个表中的相关行(即属于所需租赁的元数据行。
标签: mysql