Возможно ли написать следующий запрос с использованием подзапроса, но без объединения?

#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