我需要可以在mysql,postgres和其他主要DB上运行的联接的通用SQL查询。
我有一个名为autumn4.ip三列的表:(id, start, end所有整数)。
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),则仅使用开始索引,而不使用结束索引。现在请不要告诉我我错了。我只是想要那样。我对此做了很多研究。
start
end
(start, end)
如果我确实为开始和结束创建单个索引,则仅使用一个。我正在寻找同时使用两者的查询。
一个简单的
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;
应该管用。
但是,让我质疑您的研究质量…