|
|
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
Есть три таблицы Tab1, Tab2, Tab3 Tab2 и Tab3 являются дочерними к Tab1, соответственно, в каждой есть внешний ключ id_tab1 Необходимо в одном запросе получить объединение этих трех таблиц. Тут что-то не соображу с join, перепробовал разные варианты inner/outer у меня получается следующая картина tab2.row1 tab3.row1 tab2.row1 tab3.row2 tab2.row2 tab3.row1 tab2.row2 tab3.row2 Т.е. каждая строка в первой дочерней таблице объединяется с каждой строкой во второй таблице А надо получить чтобы каждая строка в Tab2 объединилась только с одной строкой в Tab2 т.е. tab2.row1 tab3.row1 tab2.row2 tab3.row2 Если в Tab3 меньше строк, чем Tab2, то отсутствующие строки заполняются null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2010, 22:31 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
Показывай скрипт создающий эти три таблицы и наполняющий их тестовыми данными. Показывай желаемый результат на основе тестовых данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2010, 22:53 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
JetAlex Т.е. каждая строка в первой дочерней таблице объединяется с каждой строкой во второй таблице А надо получить чтобы каждая строка в Tab2 объединилась только с одной строкой в Tab2 В Tab3 хотел сказать. Покажи запрос ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2010, 08:26 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
JetAlex wrote: > Есть три таблицы Tab1, Tab2, Tab3 > Tab2 и Tab3 являются дочерними к Tab1, соответственно, в каждой есть > внешний ключ > id_tab1 > Необходимо в одном запросе получить объединение этих трех таблиц. Нет ничего проще. select * from Tab1 t1 join Tab2 t2 on t2.id_tab1 = t1.id_tab1 join Tab3 t3 on t3.id_tab1 = t1.id_tab1 Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2010, 09:41 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
MasterZiv wrote: Ну и видимо select * from Tab1 t1 join Tab2 t2 on t2.id_tab1 = t1.id_tab1 дуае join Tab3 t3 on t3.id_tab1 = t1.id_tab1 and t3.row1 = t2.row1 Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2010, 09:43 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
Я так уже пробовал. Получается объединение каждой записи с каждой. А мне надо - первая с первой, вторая со второй, третья с третьей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2010, 12:53 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
Второй вариант также не годится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2010, 12:54 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
JetAlexЯ так уже пробовал. Получается объединение каждой записи с каждой. А мне надо - первая с первой, вторая со второй, третья с третьей. Проверь ID_REMONT_WORK в какой то таблице имеет дубль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2010, 13:57 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
JetAlexВторой вариант также не годится Я вообще-то не такой запрос писал. Прочитай внимательно. Также было бы неплохо тебе определиться, что такое "первая запись" и "вторая запись". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2010, 18:23 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
Топикстартер в вашем случае Distinct вам в руки... Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2010, 15:26 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
А вообще есть ощущение, что в ваших таблицах должна быть связь не 1-2/1-3 а 1-2-3... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2010, 15:27 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
Distinct здесь не работает. tab1-tab2-tab3 в общем случае не должно быть, т.к. работы могут быть не связаны с з/ч ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2010, 15:44 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
MasterZivJetAlexВторой вариант также не годится Я вообще-то не такой запрос писал. Прочитай внимательно. Также было бы неплохо тебе определиться, что такое "первая запись" и "вторая запись". в Вашем запросе and t3.row1 = t2.row1 в этой случае не должно быть, т.к. в в t2 и t3 кроме внешнего ключа id_t1 больше нет совпадений. А объединение только по внешнему ключу дает в результате запроса m x n строк, где m - кол-во строк в t2, n - кол-во строк в t3 Надо получить в результате m строк, где t2.row1 || t3.row1 t2.row2 || t3.row2 t3.row3 || t3.row3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2010, 15:51 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
JetAlexMasterZivJetAlexВторой вариант также не годится Я вообще-то не такой запрос писал. Прочитай внимательно. Также было бы неплохо тебе определиться, что такое "первая запись" и "вторая запись". в Вашем запросе and t3.row1 = t2.row1 в этой случае не должно быть, т.к. в в t2 и t3 кроме внешнего ключа id_t1 больше нет совпадений. А объединение только по внешнему ключу дает в результате запроса m x n строк, где m - кол-во строк в t2, n - кол-во строк в t3 Надо получить в результате m строк, где t2.row1 || t3.row1 t2.row2 || t3.row2 t3.row3 || t3.row3 Поправка. Надо получить в результате m строк, где t2.row1 || t3.row1 t2.row2 || t3.row2 t2.row3 || t3.row3[/quot] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2010, 15:53 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
JetAlex, если я правильно понимаю, то должно получиться: Name Detail Name RabotaАвтовоск силиконовый Замена головки блока цилиндраАвтопластилин Замена переднего сальника при этом у всех четырех элементов у вас стоит одинаковый ID_REMONT_WORK. Теперь вопрос - почему должна была получиться именно такая таблица, а не такая к примеру: Name Detail Name RabotaАвтовоск силиконовый Замена переднего сальникаАвтопластилин Замена головки блока цилиндра Есть какой-то признак явного соотнесения записей? Может быть дата ввода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2010, 17:14 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
JetAlex wrote: > в Вашем запросе and t3.row1 = t2.row1 в этой случае не должно быть, Родной мой, предполагалось, что ты туда допишешь нужное выражение JOIN-а. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2010, 17:18 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
Mikle83JetAlex, если я правильно понимаю, то должно получиться: Name Detail Name RabotaАвтовоск силиконовый Замена головки блока цилиндраАвтопластилин Замена переднего сальника при этом у всех четырех элементов у вас стоит одинаковый ID_REMONT_WORK. Теперь вопрос - почему должна была получиться именно такая таблица, а не такая к примеру: Name Detail Name RabotaАвтовоск силиконовый Замена переднего сальникаАвтопластилин Замена головки блока цилиндра Есть какой-то признак явного соотнесения записей? Может быть дата ввода? Примеры указаны верно. Порядок объединения записей нужен в порядке их ввода таблицу. Т.е. первая введенная в tab2 должна объединится с первой введенной в Tab3 вторая введенная в Tab2 должна объединится со второй введенной в tab3 никаких других признаков, в том числе и даты, нет. Если бы была дата, я бы уже сделал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2010, 17:39 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
MasterZiv JetAlex wrote: > в Вашем запросе and t3.row1 = t2.row1 в этой случае не должно быть, Родной мой, предполагалось, что ты туда допишешь нужное выражение JOIN-а. Если бы, я знал, как их объединить, я бы сделал, и вопросов здесь бы не задавал. В любом случае, спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2010, 17:41 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
JetAlexПорядок объединения записей нужен в порядке их ввода таблицу.Нет такой буквы в SQL. Добавь в базу поле которое будет указывать порядок добавления записей в таблицу. Это может быть и дата, и абстрактная нумерация. Но пока ты твои записи не будут однозначно отсортированы, начальная задача не будет иметь решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2010, 17:47 |
|
||
|
Запутался с JOIN
|
|||
|---|---|---|---|
|
#18+
White OwlJetAlexПорядок объединения записей нужен в порядке их ввода таблицу.Нет такой буквы в SQL. Добавь в базу поле которое будет указывать порядок добавления записей в таблицу. Это может быть и дата, и абстрактная нумерация. Но пока ты твои записи не будут однозначно отсортированы, начальная задача не будет иметь решения. ОК. Естественно, в Tab2 есть ключ Id_tab2, тип autoincrement Соответственно, в tab3 ключ id_tab3, тип autoincrement Это и имелось ввиду, когда я писал, что в "порядке ввода" А как это может помочь? Я пробовал, через Max, min, top. - для двух записей, есть варианты, а вот когда больше... Через цикл не очень хочется ваять. может, думал на селектах получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2010, 18:03 |
|
||
|
|

start [/forum/search_topic.php?author=dmitrysk&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
171ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 438ms |
| total: | 724ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...