Oracle-11g-R2

在嵌套的 where 子句中比較兩個表中的值。

  • March 28, 2016

這是一個比較具體的問題。我正在努力在 Business Objects 中創建行限制,並且客戶希望記錄在另一個表的某個範圍內。問題是,您只能選擇一張桌子。我發現的一個解決方法是我可以在 WHERE 子句中選擇其他表。

例如:

a.RE_UID = b.RE_UID

我必須使用:

a.RE_UID IN 
     (select A.RE_UID
      from 
       TABLE1 A 
       join 
       TABLE2 B
       ON 
       A.RE_UID = B.RE_UID
     )

我難過的地方是我需要將另一個表與 BETWEEN 進行比較。就像是:

A.CL_FROM_SVC_DTE BETWEEN B.EFF_DTE AND B.END_DTE

如果我像上面那樣嘗試,我會得到錯誤,它期望在 WHERE 之後出現另一個字元:

SELECT * 
FROM 
 TABLE2 
WHERE IN 
(select A.CL_FROM_SVC_DTE 
FROM TABLE1 A 
JOIN TABLE2 B ON A.RE_UID = B.RE_UID
) 
BETWEEN B.EFF_DTE AND B.END_DTE

如果您從 Table2 中選擇所有符合 Table1 條件的內容,您可以執行以下操作:

SELECT T2.* FROM TABLE2 T2
INNER JOIN TABLE1 T1 ON T2.RE_UID = T1.RE_UID
WHERE T1.CL_FROM_SVC_DTE BETWEEN T2.EFF_DTE AND T2.END_DTE

我希望它有所幫助。

不確定我既不理解問題也不理解僅從一個表中選擇的限制,所以這充其量是一個有根據的猜測:

SELECT B.* 
FROM 
TABLE2 B
WHERE b.RE_UID IN (
   select a.RE_UID
   FROM TABLE1 A 
   WHERE A.CL_FROM_SVC_DTE BETWEEN B.EFF_DTE 
                               AND B.END_DTE A.RE_UID
);

引用自:https://dba.stackexchange.com/questions/133555