如何通过SQL查询只返回10行

时间:2016-10-20 10:32:22

标签: mysql sql

我有1个查询返回超过180k行。我需要做一些小改动,这样它只会减少大约10个。

如何仅显示10行?

我已经尝试了EXCEPT,但它似乎回报的不仅仅是10。

2 个答案:

答案 0 :(得分:1)

您可以使用LIMIT。这将显示前n行。例如:

SELECT * FROM Orders LIMIT 10

如果您正在尝试进行分页,请添加OFFSET。它将从第20行开始返回10行。示例:

SELECT * FROM Orders LIMIT 10 OFFSET 20

答案 1 :(得分:0)

MySQL不支持EXCEPT(据我所知)。

可能最高效的路由是将两个WHERE子句合并为一个。我说高效意味着“如果您要在常规报表或生产应用程序中运行此查询,请执行此操作。”

例如:

-- Query 1
SELECT * FROM table WHERE `someDate`>'2016-01-01'
-- Query 2
SELECT * FROM table WHERE `someDate`>'2016-01-10'
-- Becomes
SELECT * FROM table WHERE `someDate` BETWEEN '2016-01-01' AND '2016-01-10'

您可能暗示查询非常复杂,并且您正在使用快速(读取:不一定高效)的方式来获得一次性调查的差异。< / p>

在这种情况下,您可以滥用UNION和子查询:

(未经测试,视为伪SQL ...)

SELECT
   *
FROM (
   SELECT * FROM table WHERE `someDate`>'2016-01-01'
   UNION ALL
   SELECT * FROM table WHERE `someDate`>'2016-01-10'
) AS sub
GROUP BY
   `primaryKey`
HAVING
   COUNT(1) = 1;

虽然很难看。并没有效率。

假设 唯一差异只是一方(我称之为“右手边”)是遗漏左边包含的记录,你可以LEFT JOIN两个查询(作为subs)并过滤到right-side-is-null。但这取决于所有这些警告是否属实。

临时表可以是你的朋友 - 特别是因为它们很容易创建(并且可以编入索引):

CREATE TEMPORARY TABLE tmp_xyz AS SELECT ... FROM ... WHERE ...;