SQL CROSS JOIN question
I am having a bit of trouble with my SQL query.
I have two tables:
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
and Table 2 (note it has the same schema, just different data).
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
I am trying to figure out how to write a SELECT
statement which returns all the titles WHERE
all the combinations of ABS(Table1_D0*Table2_D0)+ABS(Table1_D1*Table2_D1)+ABS(Table1_D2*Table2_D2)
are less than a thresholded value (hard coded probably).
So far I am trying to use a CROSS JOIN
, but I am not sure if this is the correct approach.
Does this make sense? Table1, row1 against all the rows of Table2, then Table1, row2 against all the rows of Table2.
If it matters, I am using MS SQL.
Many thanks! Brett
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
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
CROSS JOIN is the right choice and CROSS JOIN is just the same as no join at all (see Snowbear answer).
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
)
精彩评论