定义前半部分时忽略奇数行问题。然后将后半部分定义为前半部分中不存在的那些行。您可以使用带有 的子查询IN()
,但这样的LEFT JOIN
方法可能会更快。
SELECT secondhalf.*
FROM
products AS secondhalf
LEFT JOIN
(
SELECT TOP 50 PERCENT product_ID
FROM products
ORDER BY product_ID ASC
) AS firsthalf
ON secondhalf.product_ID = firsthalf.product_ID
WHERE firsthalf.product_ID Is Null;
子查询firsthalf与您问题中的第一个查询几乎相同。但在这种情况下,我们只需要product_ID
from 该子查询。
LEFT JOIN
在主查询中意味着它将返回所有行products
...匹配的行firsthalf.product_ID
加上不匹配的行。然后该WHERE
子句过滤掉匹配项......只留下product
与子查询行不匹配的行。
如果您products
使用不同的名称保存,创建一个products
仅包含几行的新名称,然后对查询进行试验,则可能更容易理解。丢弃该WHERE
子句并将第一行更改为SELECT firsthalf.product_ID, secondhalf.product_ID
.