Псевдоним для начинающих - PullRequest
1 голос
/ 28 марта 2020
SELECT *
FROM car_t
JOIN ( SELECT driver_id, gender, first_name,last_name
 FROM driver_t 
 WHERE gender = 'Male');

Я получаю ошибку, что не использую псевдоним. Может ли кто-нибудь помочь мне с этим? Спасибо! Мне нужно сделать оператор соединения с подзапросом.

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Ну, сообщения об ошибках относятся к вашей «производной таблице» (псевдоним «подзапрос»), которой требуется имя

SELECT *
FROM car_t
JOIN ( 
  SELECT driver_id, gender, first_name,last_name
  FROM driver_t 
  WHERE gender = 'Male'
) as x --<< the alias 

Но это просто приведет вас к следующей ошибке, потому что у вас нет условия соединения.

Так что вам нужно что-то вроде:

SELECT *
FROM car_t
JOIN ( 
  SELECT driver_id, gender, first_name,last_name
  FROM driver_t 
  WHERE gender = 'Male'
) as x on x.??? = car_t.??? 

Вам нужно заменить ??? на столбцы, которые связывают две таблицы вместе.


Но вы на самом деле не нужна производная таблица. Вы можете упростить это до

SELECT 
FROM car_t
  JOIN driver_t as x on x.??? = car_t.??? 
WHERE x.gender = 'Male';
0 голосов
/ 28 марта 2020

В SQL принято требование, чтобы у каждой производной таблицы был псевдоним (хотя некоторые базы данных слабы по этому поводу).

Ваш подзапрос создает производную таблицу, поэтому вам необходимо указать псевдоним:

SELECT * 
FROM car_t c
JOIN ( 
    SELECT driver_id, gender, first_name,last_name FROM driver_t WHERE gender = 'Male'
) d ON ???
--^ table alias

Примечания:

  • в вашем запросе явно отсутствует условие JOIN для связи двух таблиц; оно должно появиться после ключевого слова ON, которое я добавил к запросу

  • подзапрос здесь на самом деле не нужен; Вы можете просто присоединиться к таблице, а затем выбрать необходимые столбцы

SELECT 
    c.*,
    d.driver_id,
    d.gender,
    d.first_name,
    d.last_name 
FROM car_t c
JOIN driver_t d ON ???
WHERE d.gender = 'Male'
...