Как сделать кросс-соединение без креста в оракуле sql - PullRequest
0 голосов
/ 22 октября 2019

У меня есть две таблицы, отель и интересы. Я хотел бы найти расстояние между каждым отелем и каждым интересом. Я пытался использовать CROSS JOIN, но мой босс сказал мне не использовать перекрестное соединение. Есть ли другой способ? Неявное соединение и ON 1 = 1 также не допускаются. Мне сказали использовать соединение и скобки, но я не понимаю, как можно выполнить перекрестное соединение без использования перекрестного соединения. Я использую оракул sql кстати

Ответы [ 3 ]

5 голосов
/ 22 октября 2019

Ну, если в обеих таблицах нет общего столбца, вы можете сделать NATURAL JOIN: он сгенерирует декартово произведение (также называемое CROSS JOIN):

select t1.*, t2.* from table1 t1 natural join table2 t2

Демонстрация по БД Fiddle :

with 
    a as (select 1 as ida from dual union all select 2 from dual),
    b as (select 3 as idb from dual union all select 4 from dual)
select a.*, b.* from a natural join b
IDA | IDB
--: | --:
  1 |   3
  1 |   4
  2 |   3
  2 |   4

Другие опции (но, видимо, вы не можете их использовать):

Явное соединение при 1 = 1

select t1.*, t2.* from table1 t1 inner join table2 t2 on 1 = 1

Неявное соединение:

select t1.*, t2.* from table1 t1, table2 t2
1 голос
/ 22 октября 2019

Вам не нужен дополнительный синтаксис для выполнения перекрестного объединения с использованием Oracle sql.

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

select table1.*, table2.* from table1, table2

0 голосов
/ 22 октября 2019

После поиска я обнаружил, что вы можете использовать <и> в ON. Итак, я попробовал это:

SELECT * FROM a JOIN b ON (a.x<>b.x OR a.x=b.x)

И, похоже, работает как CROSS JOIN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...