Member 12754502 Ответов: 2

Объясните ниже запрос. Я не понимаю используемой концепции соединения


select p2.promo_name || ' started before ' || p1.promo_name || ' ended.'
as "Promotion Overlap"
from sh.promotions p1 inner join sh.promotions p2 on
(p1.promo_category = p2.promo_category and
p1.promo_subcategory = p2.promo_subcategory and
p1.promo_id != p2.promo_id)
where p1.promo_category = 'newspaper'
and p1.promo_subcategory = 'ad news'
and p2.promo_begin_date >= p1.promo_begin_date
and p2.promo_begin_date <= p1.promo_end_date;


Что я уже пробовал:

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

[no name]

https://en.wikipedia.org/wiki/Join_ (SQL)

Karthik_Mahalingam

обратитесь к этому http://www.w3schools.com/sql/sql_join_inner.asp

2 Ответов

Рейтинг:
1

David_Wimbley

Google - ваш друг.

Гугл[^]

Говоря конкретно о вашем присоединении

from sh.promotions p1 inner join sh.promotions p2 on
(p1.promo_category = p2.promo_category and
p1.promo_subcategory = p2.promo_subcategory and
p1.promo_id != p2.promo_id)


Вы выполняете внутреннее соединение таблицы с псевдонимом p1 с другой таблицей с псевдонимом p2. Запрос извлекает совпадения, где promo_category в p1 и p2 равны, promo_subcategory в p1 и p2 равны и где prom_id не равен в p1 и p2.

Это приведет только к получению результатов, совпадающих в обеих таблицах. Таким образом, если у вас есть 500 записей в каждой таблице (всего 1000 между p1 и p2), ваш запрос может возвращать только 100 результатов на основе используемых критериев объединения.

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


Рейтинг:
1

Maciej Los

Член 12754502[^] писанное:
пожалуйста, подробно объясните концепцию объединения. Я вообще ничего не понимаю. Этот запрос должен был избежать совпадений.


Концепция соединения объясняется здесь: Визуальное представление SQL-соединений[^]. В вашем примере а самообъединение[^] используется.

Перейдите по ссылкам, чтобы получить более подробную информацию.