2013-10-30 57 views
0

有一个表{id |日期}。我想从给定的行中选择日期>日期的所有行。对WHERE子句使用select结果

通常我会做它在两个查询:

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

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

是否有可能做一个SQL查询?

谢谢!

+0

'是否可以在一个SQL查询中完成它?'你试过了吗? –

回答

1
select * from mytable where date > (select date from mytable where id = {id}) 
0

这是一个很好的候选人self-join

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中每个输入行的多重性降至最多一个输出行。
相关问题