|
Соединение 3-х таблиц Oracle | ☑ | ||
---|---|---|---|---|
0
Штурман
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') Правильно ли будет соединение? |
|||
1
CaIIIka
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 для точного соединения?
|
|||
5
CaIIIka
18.02.20
✎
09:42
|
Все без исключения соединения работают правильно. И объединение, которое тоже связывает таблицы, в том числе. Вопрос в том, что вы хотите от этого получить? А то, что надо писать inner вместо left для более точного соединения... Или объединение не подходит, потому что нужно соединение по ключевым полям... Это неверный подход к делу.
|
|||
6
SmartContract
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 как правильней будет? |
|||
11
Said_We
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 |
|||
14
Said_We
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 нет |
|||
16
Said_We
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 выводит |
|||
18
Said_We
19.02.20
✎
09:24
|
(15) Не пойму вопроса. Внутреннее соединение так работает. Попадают только те записи, которые отвечают условию в соединении.
(17) Левое соединение выводит все записи первой таблицы и если есть, то в правой. Если нет то NULL. Так работает левое соединение. |
|||
19
Said_We
19.02.20
✎
09:25
|
(17) Так это в принципе работает.
https://ru.wikipedia.org/wiki/Join_(SQL) |
|||
20
Said_We
19.02.20
✎
09:28
|
Вопрос в (0) "как правильно" - ответ в зависимости от того какая задача стоит?
На вход дал три таблицы и спрашиваешь как правильно, но не написал, какой результат необходимо получить. Вопроса, можно сказать нет. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |