SQL CROSS JOIN вопрос - PullRequest
       17

SQL CROSS JOIN вопрос

1 голос
/ 23 февраля 2011

У меня небольшая проблема с моим запросом SQL.

У меня есть две таблицы:

Table1

id  guid  title     D0      D1     D2
-----------------------------------------
1   guid1 Title1    0.123  -0.235  0.789
2   guid2 Title2   -0.343   0.435  0.459
3   guid3 Title3    0.243  -0.267 -0.934
...
100 guid4 Title100 -0.423   0.955  0.029

и таблица 2 (обратите внимание, чтота же схема, только разные данные).

id  guid  title     D0      D1     D2
----------------------------------------
1   guid1 Title1    0.233  -0.436 -0.389
2   guid2 Title2   -0.343   0.235  0.789
3   guid3 Title3    0.573  -0.067 -0.124
...
100 guid4 Title100 -0.343   0.155  0.005

Я пытаюсь выяснить, как написать оператор SELECT, который возвращает все заголовки WHERE, все комбинации ABS(Table1_D0*Table2_D0)+ABS(Table1_D1*Table2_D1)+ABS(Table1_D2*Table2_D2) меньше чемпороговое значение (возможно, жестко запрограммированное).

Пока я пытаюсь использовать CROSS JOIN, но я не уверен, что это правильный подход.

Имеет ли это смысл? Таблица 1, строка 1 для всех строк таблицы 2 , затем Таблица 1, строка 2 для всех строк таблицы 2 .

Если это имеет значение, я использую MS SQL.

Большое спасибо!Brett

Ответы [ 4 ]

6 голосов
/ 23 февраля 2011
SELECT t1.title
FROM Table1 t1
CROSS JOIN table2 t2
WHERE ABS(t1.D0*t2.D0)+ABS(t1.D1*t2.D1)+ABS(t1.D2*t2.D2)<10
0 голосов
/ 24 февраля 2011
select t1o.title
from Table1 t1o
where not exists
(
    -- none of the cross-joined rows for t1o must be above the threshold
    select t1.title
    from Table1 t1
    cross join Table2 t2
    where t1.id = t1o.id -- only the cross joined rows for the current t1o row
    -- inverted b/c not exists
    and abs(t1.D0*t2.D0)+abs(t1.D1*t2.D1)+abs(t1.D2*t2.D2) > 10 
)
0 голосов
/ 23 февраля 2011
SELECT *
  FROM  Table1 a inner join
        Table2 b on a.Id=b.Id
where   ABS(a.D0*b.D0)+ABS(a.D1*b.D1)+ABS(a.D2*b.D2)<=@Value
0 голосов
/ 23 февраля 2011

CROSS JOIN - правильный выбор, а CROSS JOIN - это то же самое, что вообще не объединять (см. Ответ Snowbear).

...