Как сделать многоадресный запрос в MySQL? - PullRequest
0 голосов
/ 21 февраля 2011

Я новичок в SQL и обнаружил, что не совсем понимаю, какие объединения использовать когда. Подзапросы также кажутся запутанными. У меня настроены следующие таблицы, и я пытаюсь получить конкретный результат:

`+--------------------------+   +---------------+  +---------------+  +---------------+`
`|          Table_A         |   |   Table_B     |  |   Table_C     |  |   Table_D     |`
`+--------------------------+   +---------------+  +---------------+  +---------------+`
`| id | f2 | f3 | f4 | d_id |   | a_id  | c_id  |  |  id  |   fc   |  |  id  |   fs   |`
`+--------------------------+   +---------------+  +---------------+  +---------------+`

И вот что я пытаюсь получить:

`+----------------------------------+`
`| a.f2 | a.f3 | a.f4 | d.fs | c.fc |`
`+----------------------------------+`

Я обнаружил, что могу получить первые четыре столбца с помощью следующего запроса:

Select t1.f2, t1.f3, t1.f4, t2.fs
    From Table_A AS t1 INNER JOIN Table_D AS t2
    ON t1.d_id = t2.id;

Как мне добраться от A.id до C.fc? Я не могу понять, как получить пятый столбец, не говоря уже о предыдущем запросе. Это примерно столько, сколько я получил в последнем столбце:

Select t1.flow_control
    FROM Table_D AS t1 INNER JOIN policy t2
    ON t1.id = t2.c_id;

1 Ответ

3 голосов
/ 21 февраля 2011

Это должно сработать:

Select t1.f2, t1.f3, t1.f4, t2.fs, t3.fc
    From Table_A AS t1
    INNER JOIN Table_D AS t2 ON t1.d_id = t2.id
    INNER JOIN Table_B AS jointable ON t1.id = jointable.a_id
    INNER JOIN Table_C AS t3 ON jointable.c_id = t3.id;

Первое соединение - это то, которое у вас было изначально. Второй - для «связующей таблицы», которая представляет отношение HABTM между Table_A и Table_C. Как только вы присоединились к этому, вы делаете третье соединение, «соединяя» его с таблицей C, чтобы вы могли получить это поле «fc». Таким образом, по сути, первое соединение предназначено только для Table_D, а два других соединения возвращают вас в это последнее поле.

Вы можете иметь несколько JOIN в одном выражении, которые ссылаются на совершенно разные таблицы, если это то, что вам нужно ... это похоже на соединение точек / следование отношениям:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...