我有1个查询返回超过180k行。我需要做一些小改动,这样它只会减少大约10个。
如何仅显示10行?
我已经尝试了EXCEPT
,但它似乎回报的不仅仅是10。
答案 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 ...;