Каково использование для Перекрестного объединения?

97
задан Llyle 24 March 2010 в 19:49
поделиться

8 ответов

Если у Вас есть "сетка", которую Вы хотите заполнить полностью, как размер и информация о цвете для конкретного предмета одежды:

select 
    size,
    color
from
    sizes CROSS JOIN colors

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

select
    hour,
    minute
from
    hours CROSS JOIN minutes

Или у Вас есть ряд спецификаций стандартного отчета, к которым Вы хотите обратиться каждый месяц в году:

select
    specId,
    month
from
    reports CROSS JOIN months

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

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

85
ответ дан Dave DuPlantis 24 November 2019 в 05:28
поделиться

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

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

13
ответ дан Randy 24 November 2019 в 05:28
поделиться

Генерируйте данные для тестирования.

15
ответ дан Ovidiu Pacurar 24 November 2019 в 05:28
поделиться

Ключ, "показывают мне все возможные комбинации". Я использовал, они в сочетании с другими вычисляемыми полями тогда сортировали/фильтровали тех.

, Например, скажите создание арбитража (торговое) приложение. У Вас есть продавцы, предлагающие продукты по цене и покупателям, просящим продукты по стоимости. Вы делаете перекрестное объединение на ключе продукта (для подхождения потенциальных покупателей и продавцов), вычисляете распространение между стоимостью и ценой, затем вид desc. на этом, чтобы дать Вам (посредник) самые прибыльные отрасли для выполнения. Почти всегда у Вас будут другие критерии фильтра ограничения, конечно.

7
ответ дан Kevin Dostalek 24 November 2019 в 05:28
поделиться

Хорошо, это, вероятно, не ответит на вопрос, но, если это будет верно (и я даже не уверен в этом), это - забавный бит истории.

В первые годы Oracle, один из разработчиков понял, что должен был копировать каждую строку в таблице (например, возможно, что это была таблица событий, и он должен был изменить его отдельный, "запускают событие" и "записи" события конца). Он понял, что, если у него была таблица со всего двумя строками, он мог бы сделать перекрестное объединение, выбрав просто столбцы в первой таблице, и точно иметься, ему было нужно. Таким образом, он составил простую таблицу, которую он достаточно естественно назвал "ДВОЙНЫМ".

Позже, он должен сделать что-то, что могло только быть сделано через выбор из таблицы, даже при том, что само действие не имело никакого отношения к таблице, (возможно, он забыл свои часы и хотел считать время через ИЗБРАННЫЙ SYSDATE ОТ...), Он понял, что все еще имел свою таблицу DUAL, лежащую вокруг, и использовал это. Через некоторое время, он усталый от наблюдения времени, распечатанного дважды, таким образом, он возможная удаленная из строк.

Другие в Oracle начали использовать его таблицу, и в конечном счете, было решено включать его в стандартную установку Oracle.

, Который объясняет, почему таблица, чья только значение состоит в том, что она ссорится, имеет имя, что означает "два".

11
ответ дан James Curran 24 November 2019 в 05:28
поделиться

Берет что-то как таблица цифр, которая имеет десять строк для цифр 0-9. Можно использовать перекрестное объединение на той таблице несколько раз к получить результату, который имеет однако много строк, в которых Вы нуждаетесь с результатами, пронумерованными соответственно. Это имеет много использования. Например, можно объединиться, это с datadd () функционирует для получения набора в течение каждого дня в данном году.

3
ответ дан Joel Coehoorn 24 November 2019 в 05:28
поделиться

Это - интересный способ использовать перекрестное объединение для , создают отчет с перекрестными ссылками . Я нашел его в SQL Joe Celko Для Присяжных острословов и несколько раз использовал его. Это действительно берет немного установки, но стоило времени, которое инвестируют.

2
ответ дан Jeff Jones 24 November 2019 в 05:28
поделиться

Предположите, что у Вас была серия запросов, которые Вы хотите выпустить по определенной комбинации объектов и дат (цены, доступность, и т.д.). Вы могли загрузить объекты и даты в отдельные временные таблицы и иметь Ваше перекрестное объединение запросов таблицы. Это может быть более удобно, чем альтернатива для перечисления объектов и дат в В пунктах, тем более, что некоторые базы данных ограничивают число элементов в В пункте.

1
ответ дан thoroughly 24 November 2019 в 05:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: