如何使用MySQL SELECT同时执行WHERE,ORDER BY和LIMIT范围?

时间:2014-08-05 01:35:51

标签: mysql

可以自行完成LIMIT范围。

SELECT table_1.*, table_2.* 
FROM table_1
LEFT JOIN table_2
ON table_1.id = table_2.ID 
LIMIT 17402,17423

可以同时执行WHERE和ORDER BY。

SELECT table_1.*, table_2.* 
FROM table_1 
LEFT JOIN table_2 
ON table_1.id = table_2.ID 
WHERE AVAILABLE > 4 
ORDER BY table_1.id ASC

不能同时执行WHERE,ORDER BY和LIMIT范围。

SELECT table_1.*, table_2.* 
FROM table_1 
LEFT JOIN table_2 
ON table_1.id = table_2.ID 
WHERE AVAILABLE > 4 
ORDER BY table_1.id ASC 
LIMIT 17402,17423

在删除ORDER BY的同时无法同时执行WHERE和LIMIT范围。

SELECT table_1.*, table_2.* 
FROM table_1 
LEFT JOIN table_2 
ON table_1.id = table_2.ID 
WHERE AVAILABLE > 4 
LIMIT 17402,17423

希望同时执行WHERE和LIMIT范围,或者尽可能全部执行3个。

2 个答案:

答案 0 :(得分:2)

事实上,您可以使用限制位置和顺序。也许你遇到了问题,因为一旦你包含where子句,你就没有17402行?

答案 1 :(得分:1)

@BradleyKaiser打败了我,您使用WHERE子句限制了结果集,因此不再拥有之前的LIMIT行。

如果您知道某个特定行的事实,然后按照WHERE子句进行过滤,则可以随时执行子查询:

SELECT Id
    ,Available
FROM (
    SELECT table_1.id AS Id
        ,table_2.AVAILABLE AS Available
    FROM table_1
    LEFT OUTER JOIN table_2 ON table_1.id = table_2.ID 
    LIMIT 17402,17423
) AS Subset
WHERE Available > 4 
ORDER BY Id ASC

您需要花时间列出您在此处所做的列(出于维护原因,您应该这样做),但是使用此子查询设置它将首先根据您的LIMIT检索记录,然后过滤并订购生成的记录集。