#mysql #sql
#mysql — сервер #sql #mysql
Вопрос:
У меня возникли проблемы, можно ли написать следующий код без объединения? Кто-нибудь может помочь объяснить и написать код без этого, если это возможно?
SELECT DISTINCT CONCAT(first_name, ' ', last_name) AS customer_name,
state AS customer_state
FROM customers c JOIN addresses a
ON c.customer_id = a.customer_id
ORDER BY last_name, first_name
Комментарии:
1. Да, это возможно. Поместите соответствующий подзапрос в список выбора. (Но объединение все равно лучший способ.)
2. Почему вы хотели бы избежать
JOIN
? Все реляционные базы данных основаны на объединениях, это то, что делает join, связывает данные из двух источников вместе… (Хотя подход с коррелированным подзапросом не содержит в себеJOIN
ключевого слова, он все равно реализует объединение в плане explain)3. Это для домашнего задания, и я не был уверен, возможно ли это или нет.
4. Объединение может быть заменено декартовым произведением между таблицами оператор where. Например: ВЫБЕРИТЕ DISTINCT CONCAT(first_name, ‘ ‘, last_name) КАК customer_name, укажите КАК customer_state ОТ customers c, адреса a, ГДЕ c.customer_id = a.customer_id УПОРЯДОЧИТЬ ПО last_name, first_name;
Ответ №1:
Вот так:
SELECT DISTINCT
CONCAT(c.first_name, ' ', c.last_name) AS customer_name,
(SELECT a.state FROM addresses a WHERE a.customer_id=c.customer_id ) AS customer_state
FROM customers c
ORDER BY c.last_name, c.first_name