SQL在两个表之间使用Between

时间:2012-10-03 10:31:18

标签: sql db2 between

您好我想根据位于另一个表的两列之间的值从Table获取数据,在SQL下面解释我的目的:

SELECT * FROM TABLE 1 WHERE 1.FIELD1 BETWEEN 
(SELECT 2.RANGE_FROM FROM TABLE 2) AND (SELECT 2.RANGE_TO FROM TABLE 2)

这不起作用,因为我收到错误:

Error: SQL0811N  The result of a scalar fullselect, SELECT INTO statement, or VALUES INTO statement is more than one row.  SQLSTATE=21000
 (State:21000, Native Code: FFFFFCD5)

这很明显,因为两个子查询都返回多行。所以我想写一个SQL来执行上面的功能而不会出错。 该平台为IBM DB2

修改

好的我想我通过使用条件加入2个表来解决这个问题:

SELECT * FROM TABLE1 A, TABLE2 B WHERE A.FIELD1 BETWEEN B.RANGE_FROM AND B.RANGE_TO

虽然需要进行更多测试。

2 个答案:

答案 0 :(得分:4)

我怀疑你想检查table1列值是否在table2的(某一行)的2列之间:

SELECT a.* 
FROM TABLE1 AS a 
WHERE EXISTS 
      ( SELECT 1
        FROM TABLE2 AS b 
        WHERE a.FIELD1 BETWEEN b.RANGE_FROM AND b.RANGE_TO
      ) ;

这样,您就不会有table1的重复项,因此不需要DISTINCT

还要注意条件:

a.FIELD1 BETWEEN b.RANGE_FROM AND b.RANGE_TO

相当于:

b.RANGE_FROM <= a.FIELD1  AND  a.FIELD1 <= b.RANGE_TO

答案 1 :(得分:0)

between子句中使用的值应为标量值。当您的子查询返回多行时,查询失败。尝试优化子查询以返回一个结果。首先,如果您的字段位于其中,则首先确定table2中range_from和range_to的值。尝试使用range_from和max of range_to的min,或根据您的要求应用子查询中的caluse。