mysql - 如何连接两个表但不重复mysql中的行
问题描述
我面临一个获取数据的问题。我是Mysql的新手。首先我将展示我的表结构
order_products
id user_id product_id product_name
1 1 10 Jacket1
2 1 10 Jacket2
order_products_sizes
id order_product_id size qty
1 1 S 56
2 1 M 36
3 1 XL 36
4 1 2XL 56
5 2 S 32
6 2 M 28
7 2 XL 28
8 2 2XL 32
9 2 3XL 69
My expected Output:-
product_name S M XL 2XL 3XL
JACKET1 56 36 36 56
JACKET2 32 28 28 32 69
for first row 3xl would be empty beacuse there is no size available in order_product_sizes
实际上我正在使用连接,但是当我使用连接时,行会重复,因为连接两个表是连接的实际行为。到目前为止我已经尝试过:-
SELECT order_products.product_name,
CASE
WHEN order_product_sizes.order_product_id = order_products.id AND
order_product_sizes.size = 'L' THEN order_product_sizes.qty
END AS L
from order_products
join
order_product_sizes
on order_products_sizes.order_product_id = order_products.id;
解决方案
您可以在下面尝试 - 使用条件聚合
SELECT order_products.product_name,
max(CASE
WHEN
order_product_sizes.size = 'S' THEN order_product_sizes.qty
END) AS S,
max(CASE
WHEN
order_product_sizes.size = 'M' THEN order_product_sizes.qty
END) AS M,
max(CASE
WHEN
order_product_sizes.size = 'XL' THEN order_product_sizes.qty
END) AS XL,
max(CASE
WHEN
order_product_sizes.size = '2XL' THEN order_product_sizes.qty
END) AS '2XL',
max(CASE
WHEN
order_product_sizes.size = '3XL' THEN order_product_sizes.qty
END) AS '3XL'
from order_products join order_products_sizes
on order_products_sizes.order_product_id = order_products.id
group by order_products_sizes.order_product_id
推荐阅读
- forms - 如果键盘类型发生变化,Flutter TextField 焦点会重建小部件
- javascript - 使用 Google Earth Engine 将 Landsat Image Collection 缩减为长格式列表时缺少 NDVI 值
- android - SQL Cipher android studio中的“没有这样的表”
- scala - 尝试运行 Play 时出现安全异常
- java - 如何使用 Undertow 启用跨域源
- node.js - 成功验证电子邮件的操作
- ruby-on-rails - 如何在设置 Ruby on Rails 时安装 SQLite3?
- android - Firebase currentUser 从 Firebase DB 注销和删除用户有什么区别?
- eclipse - Javafx:无法将自定义控件导入 Scene Builder
- c++ - `Array[i]` 与 `Array+i`