0

{id | テーブルがあります。日にち}。指定された行から日付>日付のすべての行を選択したい。

通常、私は2つのクエリでそれを行います:

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

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

1 つの 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) は、多重度を の各入力行に対して最大で 1 つの出力行に下げますo
于 2013-10-30T06:30:18.243 に答える