我的SQL查询有点麻烦。
我有两张桌子:
表1
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
,但我不确定这是否是正确的做法。
这有意义吗? Table1,第1行针对Table2的所有行,然后 Table1,row2针对Table2的所有行。
如果重要,我正在使用MS SQL。
非常感谢! 布雷特
答案 0 :(得分:6)
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
答案 1 :(得分:0)
CROSS JOIN是正确的选择,CROSS JOIN与完全没有加入相同(请参阅Snowbear答案)。
答案 2 :(得分:0)
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
答案 3 :(得分:0)
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
)