使用where子句的mysql select语句并选择一行extra

时间:2014-05-13 19:02:28

标签: mysql

我想做一个类似SELECT * WHERE number >= 3的MySQL选择,但我也希望结果中的值低于3(我不知道是2还是1)。

如何调整查询以使此值也在结果中?

1 个答案:

答案 0 :(得分:1)

由于您在number集合之前的行中无法可靠地知道number >= 3的值,因此您需要在您拥有的查询和另一个限制之间执行UNION到第一行< 3

-- Main query returns the >= 3 set
(
  SELECT
    col1,
    col2,
    col3
  FROM yourtable
  WHERE number >= 3
)
-- Combined with another limited to one record 
-- with a descending sort < 3
UNION (
  SELECT
    col1,
    col2,
    col3
  FROM yourtable
  WHERE number < 3
  ORDER BY number DESC
  LIMIT 1
)
-- If you need a global order on these, apply it here outside the UNION
ORDER BY number ASC

请注意,我上面使用了SELECT col1, col2, col3。通常不建议在生产代码中使用SELECT *,但尤其不在UNION查询中。明确有关返回的订单列非常重要。