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
CROSS JOIN是正确的选择,而CROSS JOIN则与根本没有联接一样(请参见Snowbear答案)。
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
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
)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.