Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Соединение двух запросов с множеством таблиц через UNION / 3 сообщений из 3, страница 1 из 1
31.10.2015, 14:08:46
    #39091726
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение двух запросов с множеством таблиц через UNION
Есть запрос с множеством таблиц. Его надо соединить с еще одной таблицей transshipment, в которой есть два поля: from_card_id и to_card_id.
Стока может быть соединена либо с from_card_id, либо с to_card_id, и нужно учесть оба варианта. Т.е. создаем два одинаковых запроса и соединяем через UNION.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT *, ............,
...........................
FROM ....
INNER JOIN ....
INNER JOIN ....
INNER JOIN cargo_card cc ON cc.id = .....
....
....
INNER JOIN transshipment t ON t.from_card_id = cc.id

UNION

SELECT *, ............,
...........................
FROM ....
INNER JOIN ....
INNER JOIN ....
INNER JOIN cargo_card cc ON cc.id = .....
....
....
INNER JOIN transshipment t ON t.to_card_id = cc.id



Можно ли как-то сократить запрос, чтобы все многочисленные параметры в SELECT и джойны повторялись только один раз, а потом шли два джойна с transshipment к from_card_id и to_card_id?
...
Рейтинг: 0 / 0
31.10.2015, 15:01:52
    #39091737
transshipment ,
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение двух запросов с множеством таблиц через UNION
так
Код: sql
1.
2.
...
INNER JOIN transshipment t ON cc.id in (t.to_card_id,t.from_card_id)


или так
Код: sql
1.
2.
...
INNER JOIN (select *, to_card_id as card_id from transshipment union all select *, from_card_id as card_id from transshipment) t ON cc.id =t.card_id
...
Рейтинг: 0 / 0
31.10.2015, 15:20:01
    #39091741
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение двух запросов с множеством таблиц через UNION
transshipment ,так
Код: sql
1.
2.
...
INNER JOIN transshipment t ON cc.id in (t.to_card_id,t.from_card_id)


или так
Код: sql
1.
2.
...
INNER JOIN (select *, to_card_id as card_id from transshipment union all select *, from_card_id as card_id from transshipment) t ON cc.id =t.card_id


Спасибо, классно. Экономится немерянное количество кода.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Соединение двух запросов с множеством таблиц через UNION / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]