Как выбрать 2 одинаковых столбца по-разному из одной таблицы - PullRequest
0 голосов
/ 26 сентября 2019

Я абсолютный новичок в SQL, и я не могу этого сделать:

У меня есть одна таблица с автомобилями и старыми автомобилями, которые связаны через другое поле.В имени поля в таблице указаны все автомобили, а в этом же поле указано имя старых автомобилей.Как сделать SQL, чтобы увидеть 2 столбца (1 столбец с именем машины, 1 столбец с именем oldCar из того же поля для связанной Car-OldCar. Автомобиль и oldCar связаны через 2 поля таблицы (ModelA,Модель B).

Так, например, если я хочу увидеть старый автомобиль "Мерседес", я делаю это:

select name from table X
where ModelA IN (select ModelB from table X where name in ('mercedes'));

Спасибо

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Я подозреваю, что ваша таблица car имеет такую ​​форму:

| id   | name            | old_name_id |
| ---- | --------------- | ----------- |
| 1    | 'Peugeot'       | null        |
| 2    | 'Mercedes'      | null        |
| 3    | 'Mercedes Benz' | 2           |

Сначала я хотел бы представить запрос, который возвращает 2 столбца: name и old_name:

SELECT c.name, old_c.name 
FROM car c
JOIN car old_c ON (c.id = old_c.old_name_id)

, который должен вернуть это:

| c.name          | old_c.name      |
| --------------- | --------------- |
| 'Peugeot'       | null            | -- not sure
| 'Mercedes'      | 'Mercedes Benz' |
| 'Mercedes Benz' | null            | -- not sure

это вернет все автомобили, имеющие старое имя (не уверен, будут ли показаны записи с null, но я думаю, что да, потому что это JOIN а не LEFT JOIN.

Теперь, если вы хотите изолировать и получить, например, только запись для 'Mercedes', сделайте это так:

SELECT c.name, old_c.name 
FROM car c
JOIN car old_c ON (c.id = old_c.old_name_id)
WHERE c.name = 'Mercedes'

и выесть такой результат:

| c.name     | old_c.name      |
| ---------- | --------------- |
| 'Mercedes' | 'Mercedes Benz' |
0 голосов
/ 26 сентября 2019

Вы можете написать простую инструкцию SELECT с помощью JOINS.

Select a.Name as NewCarName, b.Name as OldCarName
FROM ModelA AS a -- new car table
INNER JOIN ModelB AS b -- old car table
ON A.SameField = b.SameField
WHERE a.Name = 'Mercedes'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...