0

有一个表{id | 日期}。我想从给定行中选择日期>日期的所有行。

通常我会在两个查询中做到这一点:

SELECT `date` FROM `mytable` WHERE `id`={id}; //get {date} from known {id}

SELECT * FROM `mytable` WHERE `date`> {date} //get the desired result

是否可以在一个 SQL 查询中完成?

谢谢!

4

2 回答 2

1
select * from mytable where date > (select date from mytable where id = {id})
于 2013-10-30T06:29:09.737 回答
0

这是自加入的好候选。

SELECT o.*
FROM mytable t         -- For every row from This table,
CROSS JOIN mytable o   -- and for every row in the Other (see note #2) table
WHERE t.id <> o.id     -- such that it is a different row
  AND o.date > t.date  -- with a date later
  AND t.id = {id}      -- than a specific row.

笔记:

  1. 因为>是在值比较中使用,所以t.id <> o.id子句可以省略。在任何情况下,查询规划器都应该很好地解决这些问题。
  2. CROSS JOIN 以笛卡尔积开始,但 WHERE 过滤器很快将其降低。特别是该t.id = {id}子句(假设id具有唯一约束)将多重性降低到o.
于 2013-10-30T06:30:18.243 回答