我正在嘗試解決一個 SQL 問題,我需要在某個交叉點選擇資料。這或多或少是我的查詢:
SELECT id FROM some_table WHERE
id IN (SELECT id FROM other_table WHERE _id=1 AND some_value >= 1 AND some_value <= 10) AND
id IN (SELECT id FROM another_table WHERE _id=2 AND some_other_value >= -65 AND some_other_value <= -2)
該查詢的問題在于它不回傳交集,因為_id兩個子查詢的欄位不同。因此,該查詢將始終回傳一個空結果。
如果我使用OR而不是AND“相交”子查詢,則也不會回傳交集。
我也不想使用,INTERSECT因為這有點慢,這只是一個非常大的查詢的一個非常簡化的例子,所以速度真的很重要。
所以,我的問題是,有沒有辦法盡快完成這個交叉路口?請記住,盡管在示例中只出現了兩個子查詢,但在我的實際用例中,子查詢的數量可能會更大。
uj5u.com熱心網友回復:
我仍然不清楚你在沒有樣本資料預期結果之后是什么:但是這些選項中的任何一個都有效嗎?
內部聯接 ...
SELECT id
FROM some_table A
INNER JOIN (SELECT id FROM other_table WHERE _id=1 AND some_value >= 1 AND some_value <= 10) B on A.ID = B.ID
INNER JOIN (SELECT id FROM another_table WHERE _id=2 AND some_other_value >= -65 AND some_other_value <= -2) C
on C.ID = A.ID
相交
SELECT id FROM some_table
INTERSECT
SELECT id FROM other_table WHERE _id=1 AND some_value >= 1 AND some_value <= 10
INTERSECT
SELECT id FROM another_table WHERE _id=2 AND some_other_value >= -65 AND some_other_value <= -2
然后我想我們可以使用exists和關聯子查詢而不是IN; 這可以更快,因為它可以在 in 沒有的地方提前逃脫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/408976.html
標籤:
