powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Соединение 3-х таблиц: Join или иначе
17 сообщений из 17, страница 1 из 1
Соединение 3-х таблиц: Join или иначе
    #37098762
Max4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Сразу скажу, что пример, просто подобранный попроще, чтобы не мудрить голову своими полями.
Имеется:

Таблица A

TAB FAM1000 Иванов2000 Петров3000 Сидоров

Таблица B
TAB DOLJ1000 инженер3000 механик

Таблица С
TAB OTDEL2000 отдел 23000 отдел 3

Надо выбрать ВСЕ строки с первой таблицы и по полю TAB выбрать данные DOLJ и OTDEL и добавить данные соответственно.
Во 2-й и 3-й таблицах можно не найти поля TAB с первой таблицы.

То есть надо:

TAB FAM Dolj Otdel1000 Иванов инженер нет в таблице32000 Петров нет в таблице2 отдел 23000 Сидоров механик отдел 3

select a.tab, a.fam, b.dolj, c.otdel
from a
left join b on a.tab=b.tab
join c on a.tab=c.tab

или

select a.tab, a.fam, b.dolj, c.otdel
from a
left join b on a.tab=b.tab
left join c on a.tab=c.tab

но это все не то.

Если бы не было нужно выводить ВСЕ строки с первой таблицы, но проблемы бы не было.
А так без LEFT JOIN не включаются записи, инфы по TAB которых нет во 2-й или 3-й таблице, а они нужны, пусть даже с пустыми ячейками.

Как такое реализовать?
Тут были примеры, но все не такие.
Создавать временную таблицу в базе для промежуточного результата(сначала две таблицы соединить во временную, потом так же временную и третью) запрещено.

Вот так бы меня устроило,

select a.tab, a.fam, b.dolj
from a
left join b on a.tab=b.tab
into d

select d.tab, d.fam, d.dolj, c.otdel
from d
left join c on d.tab=c.tab

но реализовать надо в одном запросе.
...
Рейтинг: 0 / 0
Соединение 3-х таблиц: Join или иначе
    #37098768
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max4А так без LEFT JOIN не включаются записи, инфы по TAB которых нет во 2-й или 3-й таблице, а они нужны, пусть даже с пустыми ячейками.FULL OUTER JOIN ?
правда в доках его рисуют на 2 таблицы, а тут 3 - с трудом представляю, что получится в итоге.
...
Рейтинг: 0 / 0
Соединение 3-х таблиц: Join или иначе
    #37098775
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ваш второй запрос должен полностью выдать тот вид, чтовы указали в качестве результирующего выражения. Чем не устраивает?
Код: plaintext
1.
2.
3.
select a.tab, a.fam, b.dolj, c.otdel
from a 
left join b on a.tab=b.tab
left join c on a.tab=c.tab
...
Рейтинг: 0 / 0
Соединение 3-х таблиц: Join или иначе
    #37098781
Фотография Garfish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max4,
...
Рейтинг: 0 / 0
Соединение 3-х таблиц: Join или иначе
    #37098782
Фотография Garfish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garfish,
...
Рейтинг: 0 / 0
Соединение 3-х таблиц: Join или иначе
    #37098783
Фотография Garfish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garfish, что то я не туда жму )
вот смотри там есть хранимая процедура
...
Рейтинг: 0 / 0
Соединение 3-х таблиц: Join или иначе
    #37098787
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GarfishGarfish, что то я не туда жму )
вот смотри там есть хранимая процедура

К сообщению приложен файл (ABC.rar - 38Kb) cкачать


А слабо текст ХП запринтскринить, сунуть картинку в MS Word, документ MS Word вставить как OLE - объект в ячейку MS Excel, а документ MS Excel - заархивировать и выложить здесь?
...
Рейтинг: 0 / 0
Соединение 3-х таблиц: Join или иначе
    #37098791
Фотография Garfish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД, ну ты и написал, блондинко
...
Рейтинг: 0 / 0
Соединение 3-х таблиц: Join или иначе
    #37098798
Max4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
arni,
нет, в последнем столбце не то выводит.
...
Рейтинг: 0 / 0
Соединение 3-х таблиц: Join или иначе
    #37098805
Max4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Garfishвот смотри там есть хранимая процедура
буду смотреть
...
Рейтинг: 0 / 0
Соединение 3-х таблиц: Join или иначе
    #37098824
Max4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пока не могу глянуть, у меня InterBase (пишу на Дельфи)
...
Рейтинг: 0 / 0
Соединение 3-х таблиц: Join или иначе
    #37098826
Фотография Garfish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max4,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
begin
for
select 
    a.tab,
    a.fam,
    b.dolj,
    c.otdel
from c
   right outer join a on (c.tab = a.tab)
   left outer join b on (a.tab = b.tab)

    into :TAB,  :FAM,  :Dolj,  :Otdel
do
  suspend;
end
...
Рейтинг: 0 / 0
Соединение 3-х таблиц: Join или иначе
    #37098829
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max4arni,
нет, в последнем столбце не то выводит.
Не фантазируйте. Это легко верифицируется:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table a(tab int, fam varchar( 99 ));
insert into a values( 1000 , 'Иванов');
insert into a values( 2000 , 'Петров');
insert into a values( 3000 , 'Сидоров');

create table b(tab int, dolj varchar( 99 ));
insert into b values( 1000 , 'инженер');
insert into b values( 3000 , 'механик');

create table c(tab int, otdel varchar( 99 ));
insert into c values( 2000 , 'отдел 2');
insert into c values( 3000 , 'отдел 3');

ваш запрос выдает то, что вы нарисовали
Код: plaintext
1.
2.
3.
select a.tab, a.fam, b.dolj, c.otdel
from a 
left join b on a.tab=b.tab
left join c on a.tab=c.tab

в крайнем случае, если вы стремитесь к заполнению null текстом "нет в таблице Х", то вот
Код: plaintext
1.
2.
3.
4.
5.
select a.tab, a.fam,
       coalesce(b.dolj, 'нет в таблице 2') dolj,
       coalesce(c.otdel, 'нет в таблице 3') otdel
from a 
left join b on a.tab=b.tab
left join c on a.tab=c.tab
...
Рейтинг: 0 / 0
Соединение 3-х таблиц: Join или иначе
    #37101435
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не помешало бы узнать версию БД. В старых интербейзах довольно легко поймать баг на хитрых джоинах.
...
Рейтинг: 0 / 0
Соединение 3-х таблиц: Join или иначе
    #37647101
KABANAchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arni , Спасибо, очень помог!!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Соединение 3-х таблиц: Join или иначе
    #39245587
Tom121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
arni,
Здравствуйте.
Объясните пожалуйста, новичку, что он делает не правильно?
На известном сайте решаю задачки. Вот хочу объединить 3 таблицы:

select distinct A.maker, A1.model,B.speed AS PC_speed, C.speed as LP_speed
from Product A, Product A1
left join PC B on A1.model=B.model
join Laptop C on A1.model=C.model

Результат на картинке
...
Рейтинг: 0 / 0
Соединение 3-х таблиц: Join или иначе
    #39245595
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max4,

Код: plsql
1.
2.
3.
4.
select a.tab, a.fam, b.dolj, c.otdel
from a 
left join b on a.tab=b.tab
left join c on a.tab=c.tab


но это все не то.Почему? В случае отсутствия записи надо выводить что-то типа 'нет в таблице'?

но реализовать надо в одном запросе.Может быть так (если я правильно понял суть вопроса)?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select A.TAB,
       A.FAM,
       coalesce( B.DOLJ, 'нет в таблице2' ) as DOLJ,
       coalesce( C.OTDEL, 'нет в таблице3' ) as OTDEL
  from A
  left join B on ( B.TAB = A.TAB )
  left join C on ( C.TAB = A.TAB )
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Соединение 3-х таблиц: Join или иначе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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