小编典典

如何使用索引进行两列之间的查询过滤

sql

我需要可以在mysql,postgres和其他主要DB上运行的联接的通用SQL查询。

我有一个名为autumn4.ip三列的表:(id, start, end所有整数)。

如何进行联接,以使我不按BETWEEN而是按JOIN来使用BUT?

像(伪):

SELECT * FROM autumn.ip WHERE :number-constant >= start
ORDER BY start DESC LIMIT 1;

SELECT * FROM autumn.ip WHERE :number-constant <= end
ORDER BY start ASC LIMIT 1;

如何将以上两个查询结合起来,得到以下结果:

SELECT * FROM autumn4.ip WHERE :number-constant BETWEEN START AND END LIMIT 1;

我正在尝试在start和上使用2个索引end。如果我在上使用BETWEEN和/或复合索引(start, end),则仅使用开始索引,而不使用结束索引。现在请不要告诉我我错了。我只是想要那样。我对此做了很多研究。

如果我确实为开始和结束创建单个索引,则仅使用一个。我正在寻找同时使用两者的查询。


阅读 151

收藏
2021-04-28

共1个答案

小编典典

一个简单的

SELECT * FROM autumn.ip WHERE :number-constant >= start
ORDER BY start DESC LIMIT 1
UNION
SELECT * FROM autumn.ip WHERE :number-constant <= end
ORDER BY start ASC LIMIT 1;

应该管用。

但是,让我质疑您的研究质量…

2021-04-28