【发布时间】:2014-01-14 06:59:34
【问题描述】:
我需要一个可以在 mysql、postgres 和其他主要数据库上运行的连接的通用 sql 查询。
我有一个名为 autumn4.ip 的表,其中包含三列:id, start, end(所有整数)。
如何进行连接,以便我使用 BUT 不是通过 BETWEEN 而是通过 JOIN?
喜欢(伪):
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 和/或复合索引,则只使用开始索引而不使用结束索引。现在请不要告诉我我错了。我只是想要那样。我对此做了很多研究。
如果我确实为 start 和 end 创建了单个索引,则只使用一个。我正在寻找同时使用两者的查询。
【问题讨论】:
-
请解释你为什么不使用最后一个查询,它(除了限制 1)是标准 SQL,并且你提到的所有数据库都支持。
-
我要求“不要问我为什么这样做:)”
-
@MasoodAhmad 那么我们帮不了你,因为我们必须知道你想要完成什么
-
我想要完成的是使用 2 个索引,开始和结束。如果我使用 BETWEEN 和/或 start、end 的复合索引。仅使用开始索引而不使用结束索引。现在请不要告诉我我错了。我只是想要那样。我对此做了很多研究
标签: mysql sql oracle postgresql indexing