嗨,我想根据位于另一个表的两列之间的值从表中获取数据,下面的 SQL 应该解释我的目的:
SELECT * FROM TABLE 1 WHERE 1.FIELD1 BETWEEN
(SELECT 2.RANGE_FROM FROM TABLE 2) AND (SELECT 2.RANGE_TO FROM TABLE 2)
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为我收到错误:
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)
Run Code Online (Sandbox Code Playgroud)
这很明显,因为两个子查询都返回多行。所以我想编写一个SQL来执行上述功能而不会出错。该平台是IBM DB2.
编辑:
好的,我想我通过使用条件连接 2 个表解决了这个问题:
SELECT * FROM TABLE1 A, TABLE2 B WHERE A.FIELD1 BETWEEN B.RANGE_FROM AND B.RANGE_TO
Run Code Online (Sandbox Code Playgroud)
不过还需要更多的测试。
我怀疑您想检查 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
) ;
Run Code Online (Sandbox Code Playgroud)
这样,您将不会有来自 的重复项table1,因此不需要DISTINCT.
还要注意条件:
a.FIELD1 BETWEEN b.RANGE_FROM AND b.RANGE_TO
Run Code Online (Sandbox Code Playgroud)
相当于:
b.RANGE_FROM <= a.FIELD1 AND a.FIELD1 <= b.RANGE_TO
Run Code Online (Sandbox Code Playgroud)