我有两个表(具有相同的架构)
Table1
id title D0 D1 D2 D3
------------------------------------
1 Title1 0.12 3.23 4.90 -0.12
1 Title1 0.22 0.32 -4.90 0.12
1 Title1 0.13 1.24 3.50 -0.22
...
1 TitleN 1.22 2.33 3.90 -1.56
和
Table2
id title D0 D1 D2 D3
------------------------------------
1 Title1 1.42 -0.93 -2.99 3.22
1 Title1 0.52 3.32 -4.90 0.54
1 Title1 2.13 1.14 3.50 -0.22
...
1 TitleN 3.42 4.37 3.90 -1.26
我试图找出如何进行查询,就像这样做数学:
SELECT title FROM Table2 WHERE (Table1_Row1_D0*Table2_Row1_D0)+(Table1_Row1_D1*Table2_Row1_D1)+(Table1_Row1_D2*Table2_Row1_D2) < 0.5;
但是,我希望查询迭代Table1的行并对整个Table2执行SELECT。基本上,我想从Table2中选择满足计算不等式的标题,而不是表1和表2的所有行组合。
这可能吗?
不确定是否重要,但我正在使用Postgre。
答案 0 :(得分:2)
基本上,我想选择标题 从Table2所在的计算 所有行都符合不平等 表1和表2的组合。
为此您需要反向条件,其中表1中的Table2行不存在相等。
SELECT distinct title
FROM Table2
WHERE NOT EXISTS (
SELECT *
FROM Table1
WHERE (Table1.D0*Table2.D0)+(Table1.D1*Table2.D1)
+(Table1.D2*Table2.D2) >= 0.5
)
答案 1 :(得分:1)
你需要一个CROSS JOIN
SELECT Table2.title
FROM Table2
CROSS JOIN Table1
WHERE (Table1.D0*Table2.D0)+(Table1.D1*Table2.D1)+(Table1.D2*Table2.D2) < 0.5;
答案 2 :(得分:0)
你应该使用工会。唯一需要注意的是,您的选择中的返回字段必须匹配
(SELECT * FROM Table1 WHERE conditions) UNION (SELECT * FROM Table2 WHERE conditions)
只要您没有提取太多数据,就可以在脚本端进行检查。您还可以选择将子选择添加到where条件以限制此联合查询的两侧。