Дата  Запланированые курсы
25.02 Поисковая оптимизация (SEO) для профессионалов
25.02 MOC-20742B. Инфраструктура идентификации на основе Windows Server 2016
25.02 Работа в MS Excel. Базовый уровень
25.02 MOC-20762. Разработка баз данных SQL
25.02 Архитектура современных компьютеров
03.03 Рисунок
04.03 DEV-PY-MP. Модульная программа "Разработчик прикладного программного обеспечения (Язык Python)"
04.03 DEV-C-CP. Комплексная программа «Разработчик прикладного программного обеспечения (Языки С и C++)»
04.03 Основы алгоритмизации и программирования (Группа II)
04.03 Основы алгоритмизации и программирования (Группа I)
04.03 DEV-C-CP+. Расширенная комплексная программа «Разработчик прикладного программного обеспечения (Языки С и C++)»
04.03 DEV-C10. Процедурное программирование. Языки С/C++
04.03 DEV-PY100. Основы процедурного программирования на языке Python
04.03 DEV-PY-MP+. Расширенная модульная программа "Разработчик прикладного программного обеспечения (язык Python)"
04.03 Разработка пользовательских Web-интерфейсов (JavaScript)
05.03 DEV-J-MP+. Расширенная комплексная программа "Разработчик прикладного программного обеспечения (Язык Java)"
05.03 DEV-J10. Программирование на платформе Java. Введение в язык Java
05.03 DEV-J-CP. Комплексная программа "Разработчик прикладного программного обеспечения (Язык Java)"
11.03 Компьютерное проектирование в системе AutoCAD (профессиональный курс)
11.03 MOC-20744A. Безопасность инфраструктуры средствами Windows Server 2016
11.03 Основы создания веб-сайтов. Adobe Dreamweaver
11.03 MOC-20764. Администрирование инфраструктуры баз данных SQL
11.03 Введение в тестирование программного обеспечения
11.03 Введение в тестирование программного обеспечения
11.03 Введение в тестирование программного обеспечения
14.03 Работа в MS Excel. Расширенные возможности
18.03 Инструменты бизнес-анализа Microsoft Excel: PowerPivot, PowerView
18.03 DEV-C21. Объектно-ориентированное программирование. Углубленное изучение. Язык С++
18.03 Разработка баз данных (MS Access)
18.03 MOC-10961B. Автоматизация администрирования с Windows PowerShell
20.03 NET-DLINKSW-LAB. Технологии коммутации современных сетей Ethernet. Лабораторный практикум
20.03 Автоматизация работы в Excel с использованием VBA
25.03 Информационно-коммуникационные технологии в учебном процессе
25.03 DEV-PY110. Процедурное программирование на языке Python (расширенный курс)
01.04 Трёхмерное моделирование. 3ds Max
01.04 Linux-MP. Модульная программа «Архитектура и администрирование Linux»
01.04 Linux-LE. Основы архитектуры и администрирования Linux
01.04 Средства растровой графики. Adobe Photoshop
01.04 Введение в тестирование программного обеспечения
02.04 DEV-J20. Программирование на платформе Java. Стандартные пакеты
08.04 Linux-LF. Расширенное администрирование ОС Linux
08.04 Средства векторной графики. Adobe Illustrator
08.04 Профессиональная верстка сайтов. HTML5 и CSS3
15.04 Компьютерное проектирование в системе AutoCAD (базовый курс)
16.04 DEV-C20. Объектно-ориентированное программирование. Базовый уровень. Язык С++
17.04 DEV-PY111. Базовые алгоритмы и структуры данных на языке Python
22.04 Adobe Photoshop для профессионалов
22.04 Adobe After Effects. Создание анимации и эффектов
06.05 DEV-J30. Программирование на платформе Java. Разработка многоуровневых приложений
13.05 Компьютерное проектирование в системе AutoCAD (базовый курс)
20.05 DEV-C21. Объектно-ориентированное программирование. Углубленное изучение. Язык С++
27.05 DEV-PY200. Объектно-ориентированное программирование на языке Python
03.06 Компьютерное проектирование в системе AutoCAD (профессиональный курс)
03.06 DEV-J60. Технологии разработки корпоративных приложений на платформе Java Enterprise Edition (Java EE)
17.06 DEV-C22. Стандарт С++11, С++14, С++17 для прикладного программирования
20.06 DEV-PYQT. Разработка оконных приложений Python c использованием Qt
02.09 DEV-PYWEB. Разработка WEB приложений на языке Python
02.09 DEV-QT10. Прикладное программирование на С++ с использованием Qt. Базовый уровень
02.09 DEV-OCPJP. Подготовка к сдаче сертификационных экзаменов серии Oracle Certified Professional Java Programmer
30.09 Введение в тестирование программного обеспечения
30.09 Введение в тестирование программного обеспечения
30.09 Введение в тестирование программного обеспечения
Открыт набор на весенний семестр на программы профессиональной переподготовки
Начало занятий 1 марта!
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Странности натурального объединения таблиц.
ALEART
#1 Оставлено : 23 августа 2010 г. 2:14:42(UTC)
Ранг: Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 20.09.2009(UTC)
Сообщений: 15
Баллов: 45
Откуда: Russia Санкт-Петербург

Уважаемые участники форума! Прошу Ваших советов и помощи в решении одной странной проблемы.

Итак, дано: одна из задач из книги Oracle Database 10G - SQL Fundamentals, которая требует получить полные адреса для всех департаментов (департамент - адрес - город - округ - страна). Составляю следующий запрос:
Код:

SELECT
department_id,
department_name,
location_id,
street_address,
city,
country_name
FROM departments
NATURAL JOIN locations
NATURAL JOIN countries
ORDER BY department_id;

и получаю следующую картину: таблица locations объединяется с departments как и положено - один в один, но при объединении результата с таблицей countries каждая пара "департамент - расположение" объединяется с КАЖДОЙ из стран в таблице countries. Хотя согласно теории и информации из умных книжек, подцепляться должна только одна страна.

При всём при этом: если в список полей в блоке SELECT добавить country_id или поменять порядок объединения, скажем, на следующий:
Код:

FROM locations
NATURAL JOIN countries
NATURAL JOIN departments

- то таблица countries сразу объединяется как положено: одна страна на один департаменто-адрес.

Соответственно хотелось бы узнать - чем может объясняться столь странное поведение (использую версию 10g XE для Linux)?


Заранее спасибо.

Людь в чёрном
Людь в чёрном
Реклама
Margarita.Lukina
#2 Оставлено : 23 августа 2010 г. 16:03:36(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 10.02.2006(UTC)
Сообщений: 156
Баллов: 468
Откуда: Russia Spb

Добрый день. Это не очень стабильный способ (оператор), который не рекомендуется использовать при объединение более 2х таблиц. Oracle поддерживает inner join ... on инструкцию, с явным перечислением колонок, по которым идет объединение. Воспользуйтесь ей. И все должно получиться.
Margarita Lukina
ALEART
#3 Оставлено : 24 августа 2010 г. 0:43:02(UTC)
Ранг: Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 20.09.2009(UTC)
Сообщений: 15
Баллов: 45
Откуда: Russia Санкт-Петербург

Спасибо, будем знать. Просто в книжке эту задачу предлагалось решить именно через NATURAL JOIN и я до последнего момента надеялся что это я где-то что-то пропустил.
Людь в чёрном
truel
#4 Оставлено : 29 августа 2010 г. 23:26:51(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 21.06.2007(UTC)
Сообщений: 68
Баллов: 204
Откуда: Russia StPetersburg

Natural join еще дает сбой при www.orafaq.com/wiki/Natural_join:
Natural joins may cause problems if columns are added or renamed. Also, no more than two tables can be joined using this method. So, it is best to avoid natural joins as far as possible
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.