SQL 语句的有效交集

Intersection of SQL statements efficiently

我正在尝试解决一个 SQL 问题,我需要 select 某个交叉点的数据。这或多或少是我的查询:

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)

该查询的问题在于它没有 return 交集,因为 _id 字段与两个子查询不同。因此该查询将 return 始终为空结果。

如果我使用 OR 而不是 AND 来“交叉”子查询,那么交叉也不是 returned.

我也不想使用 INTERSECT,因为那有点慢,而且这只是一个非常大的查询的简化示例,所以速度真的很重要。

所以,我的问题是,有什么办法可以尽快完成这个交集吗?请记住,即使在示例中只出现了两个子查询,但在我的实际用例中,子查询的数量可以更大。

我仍然不清楚您想要什么 w/o 示例数据预期结果:但是这些选项中的任何一个都有效吗?

内部联接...

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 的地方提前逃脱。