簡體   English   中英

SQL在兩個表之間使用Between

[英]SQL Using Between for two tables

嗨我想根據位於另一個表的兩列之間的值從表中獲取數據,在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

但是需要進行更多測試。

我懷疑你想檢查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

between子句中使用的值應為標量值。 當您的子查詢返回多行時,查詢失敗。 嘗試優化子查詢以返回一個結果。 首先,如果您的字段位於其中,則首先確定table2中range_from和range_to的值。 嘗試使用range_from和max of range_to的min,或者根據您的要求應用子查詢中的caluse。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM