Вход | Регистрация
 

Соединение 3-х таблиц Oracle

Соединение 3-х таблиц Oracle
Я
   Штурман
 
18.02.20 - 09:01
Как правильно соединить три таблицы?
К примеру, следующим кодом:


SELECT
First.ID, First.CODE, First.ADDS, Second.ID_CH, Third.*
FROM Table_1 First
LEFT JOIN Table_2 Second ON First.ID = Second.ID
LEFT JOIN Table_3 Third ON Second.ID_CH = Third.ID_CH
WHERE First.CODE IN (
'4156156', '651551', '5616513')


Правильно ли будет соединение?
   CaIIIka
 
1 - 18.02.20 - 09:05
Может UNION ALL?
   Штурман
 
2 - 18.02.20 - 09:09
(1) в смысле? это объединение уже будет, а нужно соединение по ключевым полям :)
   Сияющий в темноте
 
3 - 18.02.20 - 09:26
Inner join есть ?
хотя он и декартово с условием сам в соединение должен завернуть.
   Штурман
 
4 - 18.02.20 - 09:27
(3) есть, т.е. вместо left писать inner для точного соединения?
   CaIIIka
 
5 - 18.02.20 - 09:42
Все без исключения соединения работают правильно. И объединение, которое тоже связывает таблицы, в том числе. Вопрос в том, что вы хотите от этого получить? А то, что надо писать inner вместо left для более точного соединения... Или объединение не подходит, потому что нужно соединение по ключевым полям... Это неверный подход к делу.
   SmartContract
 
6 - 18.02.20 - 10:14
(0) На чем основаны ваши сомнения?
   Штурман
 
7 - 18.02.20 - 15:02
(5)  вопрос в том, как правильней будет на Oracle сделать соединение, чтобы все данные левой таблицы по ключевому полю соединялись с правой таблицей :)
   ДенисЧ
 
8 - 18.02.20 - 15:04
(7) Сделай так, как будет правильно на той субд, которую знаешь. Потом сделай так же на оракле.
   Андроидщик
 
9 - 18.02.20 - 22:06
(7) Очень зависит от того, нужны ли тебе данные из левой таблицы, если их нет в правой таблице.
   Штурман
 
10 - 19.02.20 - 07:25
если писать LEFT при соединении с 3-й таблицей, то 3-я таблица на некоторых строках выводится со значениями NULL

если же написать INNER вместо LEFT - INNER JOIN Table_3 Third ON Second.ID_CH = Third.ID_CH
то 3-я таблица выводится вроде бы нормально, без столбцов с NULL

как правильней будет?
   Said_We
 
11 - 19.02.20 - 08:14
(10) Вопрос не ясен. Надо чтобы были все из первой таблицы и все остальные поля если есть из остальных или что-то иное?
   Штурман
 
12 - 19.02.20 - 08:40
(11)
вопрос в том, что при соединении с 3 таблицей из нее выводятся NULL

т.е. если 2 таблицы по LEFT соединились нормально по ключевому полю, а вот если в этом же запросе соединять уже 2 таблицу с 3 по другому ключевому полю с LEFT, то ключевые поля с 3-й таблицы местами со значением NULL выводятся, в этом и весь вопрос

Если же писать INNER - то NULL нет

Пример:
LEFT
ID         CODE    ADDS     ID_CH    ID_CH1
4156156    11      142      2145     (null)
4156156    11      142      1451     (null)
4156156    11      142      4151     1531
651551     12      153      315      1512
5616513    8       215      1351     14210

INNER
ID         CODE    ADDS     ID_CH    ID_CH1
4156156    11      142      2145     151321
4156156    11      142      1451     4121
4156156    11      142      4151     1531
651551     12      153      315      1512
5616513    8       215      1351     14210
   Штурман
 
13 - 19.02.20 - 08:41
последний имел в виду так, без null
INNER
ID         CODE    ADDS     ID_CH    ID_CH1
4156156    11      142      4151     1531
651551     12      153      315      1512
5616513    8       215      1351     14210
   Said_We
 
14 - 19.02.20 - 09:11
(0) 151321 и 4121 откуда взялись в (12) или куда пропали в (13)?
   Штурман
 
15 - 19.02.20 - 09:15
(14) да пример упрощенный, вот

Пример:
LEFT
ID         CODE    ADDS     ID_CH    ID_CH1
4156156    11      142      2145     (null)
4156156    11      142      1451     (null)
4156156    11      142      4151     4151
651551     12      153      315      315
5616513    8       215      1351     1351

INNER
ID         CODE    ADDS     ID_CH    ID_CH1
4156156    11      142      4151     4151
651551     12      153      315      315
5616513    8       215      1351     1351

Т.е. когда соединение идет по LEFT и условию ID_CH=ID_CH, то почему-то в выборке столбцы с null
если же соединять по INNER, то столбцов с null нет
   Said_We
 
16 - 19.02.20 - 09:18
INNER Подразумевает пересечение множеств.
Оно возвращает пересечение двух множеств. В терминах таблиц, оно возвращает только записи из обеих таблиц, отвечающие указанному критерию.

http://www.k-press.ru/cs/2009/3/join/join.asp
   Штурман
 
17 - 19.02.20 - 09:23
(16) это понятно, но почему тогда выводится null при левом запросе?
ведь стоит же условие  ID_CH=ID_CH
однако 3 таблица часть с NULL выводит
   Said_We
 
18 - 19.02.20 - 09:24
(15) Не пойму вопроса. Внутреннее соединение так работает. Попадают только те записи, которые отвечают условию в соединении.
(17) Левое соединение выводит все записи первой таблицы и если есть, то в правой. Если нет то NULL. Так работает левое соединение.
   Said_We
 
19 - 19.02.20 - 09:25
(17) Так это в принципе работает.
https://ru.wikipedia.org/wiki/Join_(SQL)
   Said_We
 
20 - 19.02.20 - 09:28
Вопрос в (0) "как правильно" - ответ в зависимости от того какая задача стоит?
На вход дал три таблицы и спрашиваешь как правильно, но не написал, какой результат необходимо получить. Вопроса, можно сказать нет.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.