sql - 如何在连接多个表的查询中避免 DISTINCT?
问题描述
我想避免使用 DISTINCT 并为连接多个表的查询产生相同的结果。如果没有 DISTINCT,它会多次生成同一行。
我已经尝试查找如何避免 DISTINCT,但似乎没有什么对我有用,似乎是因为我的表更复杂并且同时连接多个表。
SELECT DISTINCT C.COL3, B.COL1, A.COL2, A.COL4, B.COL5 FROM C
INNER JOIN B
ON B.COL1 = C.COL1
INNER JOIN A
ON B.COL2 = A.COL2
ORDER BY C.COL3 ASC;
我知道我必须以GROUP BY
某种方式使用,但我就是无法绕过它......
解决方案
您可以按所有列分组(没有聚合):
SELECT
C.COL3, B.COL1, A.COL2, A.COL4, B.COL5
FROM C
JOIN B ON B.COL1 = C.COL1
JOIN A ON B.COL2 = A.COL2
GROUP BY C.COL3, B.COL1, A.COL2, A.COL4, B.COL5 -- group by all selected columns
ORDER BY C.COL3 ASC
如果您想要聚合上述查询的重复数据行,请将其用作子查询。例如,去SUM(B.COL5)
重复行:
SELECT
COL3, COL1, COL2, COL4, SUM(COL5)
FROM (
SELECT
C.COL3, B.COL1, A.COL2, A.COL4, B.COL5
FROM C
JOIN B ON B.COL1 = C.COL1
JOIN A ON B.COL2 = A.COL2
GROUP BY C.COL3, B.COL1, A.COL2, A.COL4, B.COL5
) deduped
GROUP BY COL3, COL1, COL2, COL4
ORDER BY COL3 ASC
推荐阅读
- flutter - 无法“发布升级”颤振工具
- scala - 通过键对大型数据集进行重新分区并为每个组逐批应用函数的内存有效方法
- django - 从用户名切换到电子邮件后,Django createsuperuser 命令不起作用
- javascript - 如何从网站 URL 中获取 body 元素的用户可读文本
- php - 根据购物车中的当前产品类型在 WooCommerce 中禁用新帐户电子邮件通知
- spring - RestTemplate 交换在 GET 调用上失败,但适用于 CURL
- c# - 在运行时实体框架核心中动态选择具有连接的列
- python - Python:csv_writer 在单独的单元格中写入 1 个数字问题
- .net - 通过控制台输入以控制字节值
- python - 没有这样的元素,Python 3.7