Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток, друзья. Нужна ваша помощь при решение одной проблемы. У меня есть 5 таблиц в БД (A,B,C,D,E) и одна временная таблица (temp_tab). Таблицы БД не связаны между собой никак, то есть нет никаких PK и FK, ссылающиеся друг на друга. Единственное, что похоже на связь между ними, так это то, что в каждой из этих таблиц есть поля названия которых совпадают с полями в других таблицах и это все. Например: A (id, name, description, value ....) B (id, name, description, value ....) C (id, name, description, value ....) D (id, name, description, value ....) E (id, name, description, value ....) Во временной таблице будут только эти поля: temp_tab (id, name, description, value). Чтобы достать данные из этих таблиц, мне придется писать 5 отдельных select-ов и сравнивать, есть ли они во временной таблице. Вопрос в след: Как сделать так, чтоб в итоге я получил след: Final_Table (id, name, description, value, и все остальные поля из таблиц (B,C,D,E))? Буду благодарен за любой совет по вопросу и любую подсказку по решению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 23:07 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
join можно писать к таблицам без наличия PK и FK между ними. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 23:21 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевич, Спасибо большое за скорый ответ. А как же быть тогда с условием, который идет после ключ.слово ON? Если вам не сложно, не могли бы вы пример какой нибудь привести или хотя бы ссылку на какую нибудь реализацию? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 23:29 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
adimmat, То условие, которое позволяет решить вашу задачу. А если не хотите, чтобы тут угадывали ее суть пару недель, будьте добры выполнить пункт 4 и пункт 6 из рекомендаций . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2019, 23:38 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевич, Вот вид моих таблиц. В этих 5-ти таблицах значения полей не совпадают, единственное, в последней таблице Temp_Tab могут быть значения из всех таблиц. Результат, который я хочу получить: Это таблица в которой будут все поля из всех таблиц A,B,C,D,E, которые есть в таблице Temp_Tab. [img=] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 00:09 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
adimmatнет никаких PK и FK. PK и FK это инструменты поддержания целостности, связности и ограничений вашей бизнес логики. Они не мешают и не помогают вам делать запросы на таблицы. То, что вы говорите похоже на union. Прочитайте по этот вид соединения. Ну и не забывайте, что как только вы сольете все таблицы в одну вы не сможете сказать какая запись пришла из какой таблицы, если не учтете это при сливании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 00:31 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
PizzaPizza Ну и не забывайте, что как только вы сольете все таблицы в одну вы не сможете сказать какая запись пришла из какой таблицы, если не учтете это при сливании. Да ну ладно, проще задачи не существует: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 00:48 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевич, Проблема в том, что UNION работает тогда, когда все поля из первой таблицы идентичны полям во второй. А у меня только 4 поля совпадают, остальные поля отличаются кардинально. Мне не 4 поля надо вытащить, а все поля из всех таблиц. Но, так как эти 4 поля во всех таблицах указывают на одну логику, а решил их не выводить по отдельности а пихнуть в одно поле финальной таблицы. Вот пример, со значениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 00:59 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
adimmatостальные поля отличаются кардинально. Мне не 4 поля надо вытащить, а все поля из всех таблиц. Но, так как эти 4 поля во всех таблицах указывают на одну логику, а решил их не выводить по отдельности а пихнуть в одно поле финальной таблицы. Вот пример, со значениями. Как вы представляете себе эти "other fielf from table ..."? Сервер должен угадать, их названия в исходных таблицах, в таблице объединения? Да и в вашем примере финальной таблицы логика объединения немного непонятна. Это рандом? Вы случайно хотите данные из таблицы а соединить с данными таблицы b по случайным полям? Как у вас id b2 соединилось с name аа? Если есть логика, то её надо озвучивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 01:23 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей АлексеевичДа ну ладно, проще задачи не существует: совершенно верно, если PizzaPizza учтете это при сливании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 01:26 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
PizzaPizza, Данные тут все рандомные. А реальная задача такова: Есть 5-типов web-сервисов (S1,S2,S3,S4,S5), которые хранят свои логи в отдельных таблицах(T1,T2,T3,T4,T5). Логи одного сервиса не могут попасть в таблицу логов другого сервиса. Есть программа которая собирает все эти логи и генерит один общий лог по работе всех сервисов и кидает все в одну временную таблицу (Temp_Tab). Так вот, в этой программе сейчас для сбора всех логов написали 5 отдельных select-ов, а это как вы понимаете, занимает очень много времени. Я хочу вместо этих 5-и написать 1 select (Ну максимум 2), чтоб сократить время работы. Подсказали, что с JOIN-ом можно, но вот в JOIN-е нужны "общие поля", чтоб подставить после ON для указания связи. А в таблицах T1,T2,T3,T4,T5 нет ничего общего и не может быть, так как там хранятся логи по работе конкретного сервиса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 01:36 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
adimmatPizzaPizza, Данные тут все рандомные. А реальная задача такова: Есть 5-типов web-сервисов (S1,S2,S3,S4,S5), которые хранят свои логи в отдельных таблицах (T1,T2,T3,T4,T5). Логи одного сервиса не могут попасть в таблицу логов другого сервиса. Есть программа которая собирает все эти логи и генерит один общий лог по работе всех сервисов и кидает все в одну временную таблицу (Temp_Tab). Так вот, в этой программе сейчас для сбора всех логов написали 5 отдельных select-ов, а это как вы понимаете, занимает очень много времени. Я хочу вместо этих 5-и написать 1 select (Ну максимум 2), чтоб сократить время работы. Подсказали, что с JOIN-ом можно, но вот в JOIN-е нужны "общие поля", чтоб подставить после ON для указания связи. А в таблицах T1,T2,T3,T4,T5 нет ничего общего и не может быть, так как там хранятся логи по работе конкретного сервиса. Очень часто, когда что то очень очень не получается, означает, что хочется невозможного. Если у вас логи хранятся изначально в отдельных таблицах, то вынимать их все равно придется из отдельных таблиц. Хоть одним запросом, хоть пятью не будет разницы, так как читать придется все равно из пяти мест. Джойн не волшебная таблетка, это просто синтаксис, который говорит что читать и какие правила применять. Пять джойнов в одном запросе это все равно пять чтений все тех же пяти исходных таблиц. Синтаксически это удобнее и красивее, но минимально заметно сократить время работы не получится. Вам надо думать, как класть данные изначально в одну таблицу. зы. Конечно же вопрос в том, что эти существующие пять запросов могут быть не очень неэффективными, но это вопрос к запросам, а не к структуре данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 02:15 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
На фоксе такие задачи решались через APPEND FROM. Но в любом случае нужен был список всех возможных полей в наборах таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 03:16 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
В доинтернетную эру скидывали разные справочники с филиалов в головной офис. А местные умельцы имели практику дополнять таблички своими полями, которые надо было не потерять. Веселуха была еще та. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 03:19 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
[quot adimmat]Есть 5-типов web-сервисов (S1,S2,S3,S4,S5), которые хранят свои логи в отдельных таблицах(T1,T2,T3,T4,T5). Задача в том, чтоб стандартизировать структуру логов отдельных сервисов, либо выбрать некий единый/центральный стандарт, к которому будут приводится данные с разных сервисов. adimmat Логи одного сервиса не могут попасть в таблицу логов другого сервиса. По идее и не должны. adimmatЕсть программа которая собирает все эти логи и генерит один общий лог по работе всех сервисов и кидает все в одну временную таблицу (Temp_Tab). Скорее всего это и есть "Объединитель" adimmatТак вот, в этой программе сейчас для сбора всех логов написали 5 отдельных select-ов, а это как вы понимаете, занимает очень много времени. Ну так если структура данных во всех случаях разная, то и будет "5 отдельных select-ов" которые можно запустить в разных местах для распараллеливания. adimmatЯ хочу вместо этих 5-и написать 1 select (Ну максимум 2), чтоб сократить время работы. Быстрее не будет. + У тебя не задача JOIN, у тебя задача UNION ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 03:27 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
Неправильно прочитал. Вру. у конечно же тебя JOIN, а не UNION А кто/что мешает сделать: select A.id, A.name, A.description, A.value, A...., B...., C...., D...., E.... и далее связав Та же наверное знаешь список дополнительных полей каждой таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 03:37 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
982183, Проблема в том, что у этих таблиц нет общих полей, чтоб я мог их связать. То есть, после условного оператора "ON" в JOIN-е я не представляю, что можно поставить учитывая структуру моих таблиц и то, что ни одно поле в таблице не ссылается на поле в другой таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 09:24 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
adimmat982183, Проблема в том, что у этих таблиц нет общих полей, чтоб я мог их связать. То есть, после условного оператора "ON" в JOIN-е я не представляю, что можно поставить учитывая структуру моих таблиц и то, что ни одно поле в таблице не ссылается на поле в другой таблице.Забудьте вы про слово "ссылается". После ON следует ЛЮБОЕ условие, которое только вы сможете придумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 09:44 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
adimmat, 1) сливаем вам остальные поля в текст (бинари) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 2) генерим все поля в итговой таблице Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 09:44 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
StarikNavy, Спасибо за приведенный пример. Я сам попробовал через OUTER JOIN писать. Только вот получаю ошибку в OUTER-е. Подскажите,плз, в правильном направлении я иду? И в чем может быть причина ошибки, с этим OUTER-ом? Вот мой запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 10:18 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
adimmat, Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 10:29 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
londiniumadimmat, Код: sql 1. Ещё короче: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2019, 11:05 |
|
||
|
Соединение несвязных таблиц в один запрос.
|
|||
|---|---|---|---|
|
#18+
adimmatПроблема в том, что у этих таблиц нет общих полей, чтоб я мог их связать. Как это "НЕТ", если выше ты пишешь adimmatв каждой из этих таблиц есть поля названия которых совпадают с полями в других таблицах id, name, description, value "это и есть общие поля" Если правильно понимаю твою задачу, что не есть факт. В простейшем и неправильном виде это может выглядеть так: Код: sql 1. 2. 3. 4. 5. 6. Вроде бред, но наглядно. А далее, в зависимости от того, как как встречаются "общие"/"идентифицирующие" данные по разным логам думай о том. как то сделать через JOIN с LEFTом или без. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2019, 15:05 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39853039&tid=1687368]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 376ms |

| 0 / 0 |
