|   |   | 
| 
 | Соединение 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) "как правильно" - ответ в зависимости от того какая задача стоит?
 На вход дал три таблицы и спрашиваешь как правильно, но не написал, какой результат необходимо получить. Вопроса, можно сказать нет. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |