我需要一个通用的 sql 查询,用于可以在 mysql、postgres 和其他主要数据库上运行的连接。
我有一个名为 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
和 end
上使用 2 个索引。如果我在 (start, end)
上使用 BETWEEN 和/或复合索引,则只使用起始索引而不使用结束索引。现在请不要告诉我我错了。我只是想要那样。我对此做了很多研究。
如果我确实为开始和结束创建单个索引,则只使用一个。我正在寻找同时使用两者的查询。
最佳答案
一个简单的
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;
应该可以。
但是,让我质疑你的研究质量......
关于mysql - 如何使用索引在两列之间进行查询过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20787915/