1

こんにちは、別のテーブルの 2 つの列の間にある値に基づいて、テーブルからデータを取得したいと考えています。以下の 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 句で使用される値は、スカラー値である必要があります。サブクエリが複数の行を返すため、クエリは失敗します。1 つの結果のみを返すようにサブクエリを調整してみてください。このために、最初に table2 の range_from と range_to の値を決定します。range_from の最小値と range_to の最大値を試すか、要件に応じてサブクエリに where caluse を適用します。

于 2012-10-03T10:39:13.903 に答える