Почему я получаю повторяющийся столбец в результатах этого запроса?

Когда я отправляю этот запрос (из курса codeacademy), я получаю два столбца customer_id и не могу понять, почему и как удалить столбец дубликата?

Скриншот столов

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;

не ленись. Не используйте * — укажите столбцы явно

Sergey 30.03.2023 21:22

Потому что SELECT * выбирает все столбцы из всех таблиц в запросе

NickW 30.03.2023 21:22
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы используете SELECT *, а Customer_ID существует как в вашем CTE «previous_results», так и в таблице клиентов. SELECT * вернет все столбцы из обоих. Укажите имена столбцов.

Ответ принят как подходящий

Причина, по которой вы получаете два столбца 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;

В этой версии мы выбираем только столбцы customer_id и name из таблицы клиентов, а также столбцы customer_id и order_count из подзапроса previous_results. Мы также используем ключевое слово AS, чтобы переименовать столбец COUNT(customer_id) в order_count, что упрощает чтение результата запроса.

Другие вопросы по теме