Использовать результат одного запроса внутри запроса и объединять результаты [Решено] - PullRequest
0 голосов
/ 14 июля 2020

У меня есть две таблицы со следующими столбцами:

Таблица vehicles:

| id (PK) | model (FK) | state | plates | owner | registered | active |
|---------|------------|-------|--------|-------|------------|--------|
|    1    |     4      |  0,0  | D0491C |   4   |     1      |    1   |
|    2    |     1      |  1,0  | C8S0A1 |   5   |     1      |    0   |
|    3    |     2      |  0,0  | V8S0CA |   4   |     1      |    1   |

Таблица vehicle_database:

| id (PK) | year | brand |   model   |
|---------|------|-------|-----------|
|    1    | 2011 | Dodge | Charger   |
|    2    | 2009 | Ford  | Focus     |
|    3    | 2015 | Audi  | A6        |
|    4    | 2019 | BMW   | E60       |

vehicles.model - это внешний ключ для vehicle_database.id, и я хотел бы ВЫБРАТЬ все результаты из таблицы транспортных средств с помощью owner, а где registered и active оба состояния равны 1. Я также хочу отобразить vehicles.model, однако используя фактическое название модели из vehicle_database, некую конкатенацию столбцов года, бренда и модели.

Например, используя следующие условия поиска:

owner = 4 registered = 1 active = 1

Мне нужен результат:

| id (PK) |    modelName    | state | plates | owner | registered | active |
|---------|-----------------|-------|--------|-------|------------|--------|
|    1    |   2019 BMW E60  |  0,0  | D0491C |   4   |     1      |    1   |
|    3    | 2009 Ford Focus |  0,0  | V8S0CA |   4   |     1      |    1   |

Отображается результат все автомобили owner из 4, зарегистрированы и активны как 1, так и modelName отображает фактическое имя из vehicle_database.

Ближайшее, что я получил, - это этот запрос, однако это отображает повторяющиеся результаты:

SELECT vehicle.id, vehicle.model, vehicle.state, vehicle.plates, db.year, db.brand, db.model
FROM `vehicles` vehicle, `vehicle_database` db
WHERE vehicle.owner = 4 AND vehicle.registered = 1 AND vehicle.active = 1;

Решение

SELECT vehicle.id, vehicle.model, vehicle.state, vehicle.plates, CONCAT(db.year, ' ', db.brand, ' ', db.model) as modelName
FROM `vehicles` vehicle, `vehicle_database` db
WHERE vehicle.owner = 4 AND vehicle.registered = 1 AND vehicle.active = 1
AND vehicle.id = db.id;

Добавление предложения сравнения AND vehicle.id = db.id соответствует ключам, а затем мы можем просто использовать функцию CONCAT() для трех столбцов, чтобы объединить их AS modelName.

1 Ответ

2 голосов
/ 14 июля 2020

Просто добавьте условие для объединения обеих таблиц (по id)

SELECT vehicle.id, vehicle.model, vehicle.state, vehicle.plates, db.year, db.brand, db.model
FROM `vehicles` vehicle, `vehicle_database` db
WHERE vehicle.owner = 4 AND vehicle.registered = 1 AND vehicle.active = 1
AND vehicle.id=db.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...