SQL xin手错误鉴赏
2022/2/1 2:13:18
本文主要是介绍SQL xin手错误鉴赏,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 1. 第一段代码
- 2. 第二段代码
- 2.1 题目地址:SQL82 牛客的课程订单分析(六)
- 2.2 报错
- 2.3 解释
- 2.4 解决
- 2.5 反思
1. 第一段代码
2. 第二段代码
2.1 题目地址:SQL82 牛客的课程订单分析(六)
# 写出一个sql语句查询在2025-10-15以后, # 同一个用户下单2个以及2个以上状态为购买成功的 # C++课程或Java课程或Python课程的订单id,是否拼团以及客户端名字信息, # 最后一列如果是非拼团订单,则显示对应客户端名字, # 如果是拼团订单,则显示NULL,并且按照order_info的id升序排序 # order_info # client SELECT t.id, t.is_group_buy, IF(t.is_group_buy = 'Yes', NULL, t.name) AS client_name FROM (SELECT *, COUNT(*) OVER(PARTITION BY user_id) AS cnt FROM order_info o LEFT JOIN client c ON o.client_id = c.id WHERE date > '2025-10-15' AND status = 'completed' AND product_name IN ('C++', 'Java', 'Python') ) AS t WHERE t.cnt >= 2 ORDER BY t.id
2.2 报错
Execution Error SQL_ERROR_INFO: "Duplicate column name 'id'"
2.3 解释
报错原因是参与子查询中参与JOIN
的两个表存在相同名称的字段,且并非连接字段,即下图的id
2.4 解决
表格中有相同字段对的情况下,在select 字段的时候需要在其前面指定表格名。比如 SELECT xxx
改为SELECT a.xxx
# 写出一个sql语句查询在2025-10-15以后, # 同一个用户下单2个以及2个以上状态为购买成功的 # C++课程或Java课程或Python课程的订单id,是否拼团以及客户端名字信息, # 最后一列如果是非拼团订单,则显示对应客户端名字, # 如果是拼团订单,则显示NULL,并且按照order_info的id升序排序 # order_info # client SELECT t.id, t.is_group_buy, IF(t.is_group_buy = 'Yes', NULL, t.name) AS client_name FROM (SELECT o.*, c.name, # 这里并非全选使用 *,而是指定表格o,为了排除表格c中重复的字段id(也可以选择在外表使用JOIN) COUNT(*) OVER(PARTITION BY user_id) AS cnt FROM order_info o LEFT JOIN client c # 这里不能使用 INNER JOIN ON o.client_id = c.id WHERE date > '2025-10-15' AND status = 'completed' AND product_name IN ('C++', 'Java', 'Python') ) AS t WHERE t.cnt >= 2 ORDER BY t.id
2.5 反思
其实这里问题的根源是我将JOIN
放在了FROM
后面的子查询中,而子查询的SELECT
中使用了全选*
,这是一条新手经验:使用了JOIN
,就要注意对重复字段进行指定表格,包括*
这篇关于SQL xin手错误鉴赏的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南