2016-12-29 3 views
-2

Мы имеем дело с географическими данными с нашей базой данных Oracle.Сравнение двух несвязанных таблиц sql

Существует функция ST_Insertects (x, y), которая возвращает true, если запись x пересекает y.

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

condition 1 : A.TIMEZONE = 1 (Timezone field is not unique) 
condition 2 : B.TIMEZONE = 1 
condition 3 : ST_Intersects(A.SHAPE, B.SHAPE) (Shape field is where the geographical information is stored) 

Результат мы ищем в записи только из таблицы а, удовлетворяет все 3 условия выше

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

+0

Интересно. Условиями * two * являются «условие 1», «условие 2» и «условие 3»? Кроме того, как вы планируете использовать возвращаемое значение из своей функции, учитывая, что простой SQL (реализация Oracle) не знает тип данных Boolean? Сделайте функцию возвратом 0 или 1 (тип данных NUMBER). – mathguy

ответ

0

Если вы хотите использовать возвращаемое значение из своей функции в операторе Oracle SQL, вам нужно будет изменить функцию для возврата 0 или 1 (или 'T'/'F' - некоторый тип данных, поддерживаемый Oracle Database, который НЕ поддерживает тип данных Boolean).

Тогда вы, вероятно, хотите что-то вроде

select <columns from A> 
from A 
where A.timezone = 1 
    and exists (select * 
       from B 
       where B.timezone = 1 
        and ST_intersects(A.shape, B.shape) = 1 
      ) 
2

псевдо-код, который демонстрирует перекрестное соединение:

select A.* 
from 
    tbl1 A, tbl2 B 
where 
    A.TIMEZONE = 1 and 
    B.TIMEZONE = 1 and 
    ST_Intersects(A.SHAPE, B.SHAPE) 

если вы получите кратные, вы можете поставить четкие и только выбрать столбцы A.XXX

С перекрестное соединение строк совпадают, как этот

a.row1 - b.row1 
a.row1 - b.row2 
a.row1 - b.row3 
a.row2 - b.row1 
a.row2 - b.row2 
a.row2 - b.row3 

Итак, если строка 1 оценивается как истина на нескольких строках, затем просто добавьте отчет на a.Column1 и т. д.