У меня есть две таблицы со следующими столбцами:
Таблица 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
.