在查询中连接两个SQL表

时间:2011-01-17 22:18:41

标签: php sql postgresql

我有两个表(具有相同的架构)

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。

3 个答案:

答案 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条件以限​​制此联合查询的两侧。