powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Запутался с JOIN
21 сообщений из 21, страница 1 из 1
Запутался с JOIN
    #36688754
JetAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть три таблицы 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
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36688780
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Показывай скрипт создающий эти три таблицы и наполняющий их тестовыми данными.
Показывай желаемый результат на основе тестовых данных.
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36689112
BirdIV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JetAlex
Т.е. каждая строка в первой дочерней таблице объединяется с каждой строкой во второй таблице
А надо получить чтобы каждая строка в Tab2 объединилась только с одной строкой в Tab2

В Tab3 хотел сказать.
Покажи запрос
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36689194
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36689198
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36689757
JetAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так уже пробовал.
Получается объединение каждой записи с каждой.
А мне надо - первая с первой, вторая со второй, третья с третьей.
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36689763
JetAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Второй вариант также не годится
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36689992
BirdIV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JetAlexЯ так уже пробовал.
Получается объединение каждой записи с каждой.
А мне надо - первая с первой, вторая со второй, третья с третьей.

Проверь ID_REMONT_WORK в какой то таблице имеет дубль.
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36690893
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JetAlexВторой вариант также не годится

Я вообще-то не такой запрос писал. Прочитай внимательно. Также
было бы неплохо тебе определиться, что такое "первая запись" и "вторая запись".
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36692627
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Топикстартер в вашем случае Distinct вам в руки...

Код: plaintext
Select Distinct ....
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36692629
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще есть ощущение, что в ваших таблицах должна быть связь не
1-2/1-3
а
1-2-3...
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36692670
JetAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Distinct здесь не работает.
tab1-tab2-tab3 в общем случае не должно быть, т.к. работы могут быть не связаны с з/ч
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36692698
JetAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36692703
JetAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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]
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36693071
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JetAlex,

если я правильно понимаю, то должно получиться:

Name Detail Name RabotaАвтовоск силиконовый Замена головки блока цилиндраАвтопластилин Замена переднего сальника

при этом у всех четырех элементов у вас стоит одинаковый ID_REMONT_WORK.

Теперь вопрос - почему должна была получиться именно такая таблица, а не такая к примеру:
Name Detail Name RabotaАвтовоск силиконовый Замена переднего сальникаАвтопластилин Замена головки блока цилиндра

Есть какой-то признак явного соотнесения записей? Может быть дата ввода?
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36693086
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JetAlex wrote:

> в Вашем запросе and t3.row1 = t2.row1 в этой случае не должно быть,

Родной мой, предполагалось, что ты туда допишешь нужное выражение JOIN-а.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36693158
JetAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mikle83JetAlex,

если я правильно понимаю, то должно получиться:

Name Detail Name RabotaАвтовоск силиконовый Замена головки блока цилиндраАвтопластилин Замена переднего сальника

при этом у всех четырех элементов у вас стоит одинаковый ID_REMONT_WORK.

Теперь вопрос - почему должна была получиться именно такая таблица, а не такая к примеру:
Name Detail Name RabotaАвтовоск силиконовый Замена переднего сальникаАвтопластилин Замена головки блока цилиндра

Есть какой-то признак явного соотнесения записей? Может быть дата ввода?

Примеры указаны верно.
Порядок объединения записей нужен в порядке их ввода таблицу.
Т.е. первая введенная в tab2 должна объединится с первой введенной в Tab3
вторая введенная в Tab2 должна объединится со второй введенной в tab3
никаких других признаков, в том числе и даты, нет. Если бы была дата, я бы уже сделал.
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36693164
JetAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
JetAlex wrote:

> в Вашем запросе and t3.row1 = t2.row1 в этой случае не должно быть,

Родной мой, предполагалось, что ты туда допишешь нужное выражение JOIN-а.

Если бы, я знал, как их объединить, я бы сделал, и вопросов здесь бы не задавал.
В любом случае, спасибо за помощь.
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36693185
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JetAlexПорядок объединения записей нужен в порядке их ввода таблицу.Нет такой буквы в SQL.
Добавь в базу поле которое будет указывать порядок добавления записей в таблицу. Это может быть и дата, и абстрактная нумерация. Но пока ты твои записи не будут однозначно отсортированы, начальная задача не будет иметь решения.
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36693246
JetAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlJetAlexПорядок объединения записей нужен в порядке их ввода таблицу.Нет такой буквы в SQL.
Добавь в базу поле которое будет указывать порядок добавления записей в таблицу. Это может быть и дата, и абстрактная нумерация. Но пока ты твои записи не будут однозначно отсортированы, начальная задача не будет иметь решения.

ОК.
Естественно, в Tab2 есть ключ Id_tab2, тип autoincrement
Соответственно, в tab3 ключ id_tab3, тип autoincrement
Это и имелось ввиду, когда я писал, что в "порядке ввода"
А как это может помочь?
Я пробовал, через Max, min, top. - для двух записей, есть варианты,
а вот когда больше... Через цикл не очень хочется ваять. может, думал на селектах получится.
...
Рейтинг: 0 / 0
Запутался с JOIN
    #36693394
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JetAlexА как это может помочь?Сделай то, о чем я просил в самом начале: напиши скрипт создающий таблички с тестовыми данными. Покажи желаемый результат на этих тестовых данных.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Запутался с JOIN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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