MYSQL выбор нового столбца на основе нескольких объединений - PullRequest
0 голосов
/ 07 декабря 2018

Я все еще работаю над некоторыми перегибами с MySQL, поэтому любая помощь будет оценена.

У меня есть 3 таблицы - оборудование, состояния, зоны.

equipment:
+---------------+------+------------+
| current_state |  id  | ...columns | 
+---------------+------+------------+

states:
+----------+-------------+
| state    | zone_id     |
+----------+-------------+

zones:
+-----+------+
| id  | zone | 
+-----+------+

В оборудовании,в строке есть одно значение current_state.

В штатах есть один идентификатор_зоны для каждой строки.

В зонах имеется одна зона на строку.

Я хочу присоединитьсятри таблицы в качестве оператора выбора подзапроса (даже не уверены, что это так) и имеют выходной результат в виде 1 столбца с псевдонимом среди других столбцов, которые я выбираю

+--------------+-------------+
| current_zone | ....columns |
+--------------+-------------+

Пример ожидаемого результата::

+------------+-------------+--------+------------------+--------------+---------+
|    c_id    |    g_id     |  e_id  | equipment_type   | impressionId | email   |
+------------+-------------+--------+------------------+--------------+---------+
| 1234       | ABC1234     | 0001   | VEST             | 2032         |ab@yc.com|
| 1234       | 1234ABC     | 0001   | SHIRT            | 4372         |ab@yc.com|
| 1234       | DCBA123     | 0001   | CAN              | 4372         |ab@yc.com|
| 1234       | DCBA321     | 0001   | JACKET           | ab@yc.com    |ab@yw.com| 
| 4567       | abc321d     | 0002   | SHIRT            | 2032         |db@yw.com|
| 4567       | cba123d     | 0002   | CAN              | 4372         |db@yw.com|
| 4567       | def4rg4     | 0002   | JEANS            | 3210         |db@yw.com|
+------------+-------------+--------+------------------+--------------+---------+

В текущем запросе есть несколько объединений, уже ссылающихся на таблицу зон и состояний для определения другого значения:

SELECT equipment.*,
    ...
    FROM equipment
    LEFT JOIN c on equipment.c_id = c.id
    LEFT JOIN g on equipment.g_id = g.id
    LEFT JOIN states on g.state = states.state
    LEFT JOIN zones on zones.id = states.zone_id

По сути, я хочу создатьподзапрос для создания нового столбца на основе результатов трех объединений, что-то вроде этого:

SELECT equipment.*,
    (SELECT
        equipment.current_state
        FROM equipment
        LEFT JOIN equipment.current_state = states.state
        LEFT JOIN zones.id = states.zone_id
    ) as current_zone,
    ...

Это вообще возможно?Я пытаюсь выбрать новый столбец в неправильном месте?

1 Ответ

0 голосов
/ 07 декабря 2018

Благодаря @TheImpaler я смог очистить свой скалярный подзапрос.В моих глазах я думал, что мне нужно создать еще одно объединение на основе свойств, которые я хотел, когда в действительности все, что мне нужно было сделать, это создать условный скалярный подзапрос:

SELECT equipment.*,
(SELECT zones.zone
    FROM zones
    WHERE equipment.current_state = states.state
    AND zones.id = states.zone_id
) as current_zone,
...
...