定义前半部分时忽略奇数行问题。然后将后半部分定义为前半部分中不存在的那些行。您可以使用带有 的子查询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_IDfrom 该子查询。
LEFT JOIN在主查询中意味着它将返回所有行products...匹配的行firsthalf.product_ID加上不匹配的行。然后该WHERE子句过滤掉匹配项......只留下product与子查询行不匹配的行。
如果您products使用不同的名称保存,创建一个products仅包含几行的新名称,然后对查询进行试验,则可能更容易理解。丢弃该WHERE子句并将第一行更改为SELECT firsthalf.product_ID, secondhalf.product_ID.