1

嗨,我想根据位于另一个表的两列之间的值从表中获取数据,下面的 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

不过还需要更多的测试。

4

2 回答 2

5

我怀疑您想检查 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
于 2012-10-03T10:45:26.543 回答
0

between 子句中使用的值应该是标量值。由于您的子查询返回多行,因此查询失败。尝试优化您的子查询以仅返回一个结果。为此,首先确定 table2 中的 range_from 和 range_to 的值应该介于两者之间。尝试 range_from 的 min 和 range_to 的 max,或者根据您的要求在子查询中应用 where caluse。

于 2012-10-03T10:39:13.903 回答