kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 ninesided
ninesided
Вопрос

Каковы преимущества явного закрытия транзитивного соединения (Join Transitive Closure) в SQL?

Когда я объединяю три или более таблиц по общему столбцу, я пишу запрос следующим образом:

SELECT *
FROM   a, b, c
WHERE  a.id = b.id
AND    b.id = c.id

Недавно коллега спросил меня, почему я не делаю явного Join Transitive Closure в своих запросах, например, так:

SELECT *
FROM   a, b, c
WHERE  a.id = b.id
AND    b.id = c.id
AND    c.id = a.id

действительно ли в этом есть какие-то преимущества? Наверняка оптимизатор может сам это подразумевать?

edit: Я знаю, что это'дурной синтаксис, но это'быстрый и грязный пример легитимного унаследованного кода +1 @Stu за его очистку.

4 2008-08-14T13:44:43+00:00 8
 Community
Community
Редактировал вопрос 23-го мая 2017 в 10:32
Программирование
sql
Решение / Ответ
angry person
angry person
14-го августа 2008 в 1:53
2008-08-14T13:53:33+00:00
Дополнительно
Источник
Редактировать
#8414880

Вы don' t должен сделать это в сегодняшних ядрах базы данных, но было время, когда подобные вещи дадут оптимизатору вопроса больше намеков относительно возможных путей индекса и таким образом к более быстрым результатам.

В эти дни тот весь синтаксис выходит так или иначе.

4
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
 Stu
Stu
14-го августа 2008 в 2:30
2008-08-14T14:30:39+00:00
Дополнительно
Источник
Редактировать
#8414881

Это - грязный, злой устаревший синтаксис. Вы пишете это как

Выбрать

    • О, и don' t когда-либо используют *, также От A внутреннее соединение B на A.ID = B.ID внутреннее соединение C на B.ID = C.ID
4
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
Nick Berardi
Nick Berardi
14-го августа 2008 в 1:46
2008-08-14T13:46:23+00:00
Дополнительно
Источник
Редактировать
#8414876

Нет, этот синтаксис появился еще в те времена, когда в языке не было джойнов. Не знаю, какие проблемы с ним связаны, но определенно есть конструкции языка, которые лучше поддерживают объединение таблиц.

2
0
 Keith
Keith
14-го августа 2008 в 1:51
2008-08-14T13:51:24+00:00
Дополнительно
Источник
Редактировать
#8414879

В Microsoft SQL планы вопроса относительно этих двух вопросов идентичны - они выполнены таким же образом.

1
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
Lars Mæhlum
Lars Mæhlum
14-го августа 2008 в 1:50
2008-08-14T13:50:39+00:00
Дополнительно
Источник
Редактировать
#8414878

Я просто хочу сказать, что такое объединение - это работа дьявола.
Только подумайте, в операторе where смешиваются условия объединения и фильтрации.
Что произойдет, если вам нужно объединить 20 таблиц и отфильтровать 15 значений?

Опять же, просто мое мнение.

1
0
 GateKiller
GateKiller
14-го августа 2008 в 1:48
2008-08-14T13:48:30+00:00
Дополнительно
Источник
Редактировать
#8414877

Если посмотреть на это с математической точки зрения, то ваши примеры должны дать одинаковые результаты.

a = b = c

Таким образом, первый пример даст те же результаты, что и второй, поэтому нет необходимости выполнять дополнительную работу.

 zero323
zero323
Редактировал ответ 3-го ноября 2013 в 9:15
1
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
 sdfx
sdfx
6-го февраля 2009 в 11:10
2009-02-06T11:10:02+00:00
Дополнительно
Источник
Редактировать
#8414883

Этот вопрос подобен этому здесь с очень всесторонним объяснением:

https://stackoverflow.com/questions/397089/sql-question-from-joel-spolsky-article

Короткий ответ, что явная декларация transitiv собственности может ускорить вопрос. Это вызвано тем, что оптимизация вопроса не тривиальная задача, и у некоторых SQL-серверов могли бы быть проблемы с нею.

 Community
Community
Редактировал ответ 23-го мая 2017 в 11:55
0
0
 Rad
Rad
14-го августа 2008 в 5:46
2008-08-14T17:46:36+00:00
Дополнительно
Источник
Редактировать
#8414882

У того синтаксиса есть свое использование хотя... есть времена, когда Вы находите, что должны присоединиться к двум столам больше чем на одной области

-1
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
Похожие сообщества 4
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
3 771 пользователей
Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.
Открыть telegram
sql_ninja
sql_ninja
2 636 пользователей
Канал для тех, кто знает или интересуется SQL 🛢 Взаимная помощь и позитив =) Вакансии тут - @sql_jobs Бан за: оскорбления, спам, фри рекламу, расизм, сексизм. Наш MSSQL канал - @sqlcom По рекламе: @aveLestat
Открыть telegram
SQL JOBS
SQL JOBS
2 600 пользователей
Обязательны: компания, город, позиция, вилка, наличие удалёнки, требования, контакты. Бан за рекламу, сексизм, расизм и неадекватный обсёр объявлений
Открыть telegram
Lazarus : Database (Firebird, mySQL, SQLite, PostgreSQL, ...)
37 пользователей
Базы данных в Lazarus https://t.me/Delphi_Lazarus (по-русски) https://t.me/Delphi_Lazarus_offtop https://t.me/freepascal_en (по-английски) по темам: https://t.me/Lazarus_Database https://t.me/Lazarus_Graphics https://t.me/Lazarus_Android
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Александр Македонский
Зарегистрирован 6 дней назад
2
Andrei Kalinin
Зарегистрирован 3 недели назад
3
Koroleva Ego
Зарегистрирован 1 месяц назад
4
Star Lenon
Зарегистрирован 1 месяц назад
5
Данил Жевнеров
Зарегистрирован 2 месяца назад
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
ID
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией