您好我想根据位于另一个表的两列之间的值从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
虽然需要进行更多测试。
答案 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。