对WHERE子句使用select result

时间:2013-10-30 06:23:04

标签: mysql sql

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

通常我会在两个查询中执行此操作:

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

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

是否可以在一个SQL查询中执行此操作?

谢谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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中每个输入行的最多一个输出行。