sqlite 为什么我在这个查询的结果中得到一个重复的列?[重复]

a6b3iqyw  于 2023-04-06  发布在  SQLite
关注(0)|答案(2)|浏览(169)

此问题已在此处有答案

SQL: Remove duplicate columns when joining tables with large number of columns(2个答案)
6天前关闭
当我提交这个查询(来自codeacademy course)时,我得到了两个customer_id列,我不明白为什么,以及如何删除dupe列?
Screen cap of tables

WITH previous_results AS (
  SELECT customer_id, COUNT(customer_id) FROM orders
  GROUP BY customer_id
)
SELECT * FROM previous_results
JOIN customers
  ON previous_results.customer_id = customers.customer_id;
busg9geu

busg9geu1#

在查询结果中获得两个customer_id列的原因是,您选择了previous_results和customers表中的所有列。由于两个表都有一个customer_id列,因此最终会得到两个同名的列。
要删除重复的customer_id列,需要显式列出要选择的列,并排除其中一个customer_id列。如果需要,可以使用SQL AS关键字重命名选定的列。
下面是查询的更新版本,它只选择必要的列并重命名它们以避免重复的列名:

WITH previous_results AS (
  SELECT customer_id, COUNT(customer_id) AS order_count
  FROM orders
  GROUP BY customer_id
)
SELECT customers.customer_id, customers.name, previous_results.order_count
FROM previous_results
JOIN customers ON previous_results.customer_id = customers.customer_id;

在这个版本中,我们只从customers表中选择customer_id和name列,从previous_results子查询中选择customer_id和order_count列。我们还使用AS关键字将COUNT(customer_id)列重命名为order_count,这使得更容易读取查询结果。

qc6wkl3g

qc6wkl3g2#

您使用的是SELECT *,并且CTE“previous_results”和customer表中都存在Customer_ID。SELECT * 将返回这两个表中的所有列。请指定列名。

相关问题