0

こんにちは、mysql クエリ (DQL) について質問があります。

テーブル:

id| start | end   | day
-------------------------------
1 | 10:00 | 11:00 | 03-05-2013
2 | 11:00 | 12:00 | 03-05-2013
3 | 10:30 | 12:00 | 03-05-2013
4 | 13:00 | 14:00 | 03-05-2013
5 | 14:00 | 15:00 | 03-05-2013

その結果、(列: id、開始、終了) 開始と終了の間に同じ部分を持つ行のみを取得したいと考えています。その結果、私は取得したいと思います:

id| start | end   
------------------
1 | 10:00 | 11:00 
2 | 11:00 | 12:00 
3 | 10:30 | 12:00 

行 1 と 3 は 10:30 と 11 の間で同じ時間であり、行 2、3 は 11:00 から 12:00 の間で同じ時間であるためです。

出力として何を取得したいのかが明確であることを願っています。教義のDQL構文で答えを得るのは素晴らしいことです。

4

1 に答える 1

0

テーブルを自己結合し、ペア間の競合を探す必要があります

SELECT 
  t1.id,
  t1.start,
  t1.end
FROM table_name t1
JOIN table_name t2
WHERE
  t1.start < t2.end AND
  t2.start < t1.end AND
  t1.id <> t2.id AND
  t1.date = t2.date

SELECT DISTINCT または GROUP BY を使用して、出力内の重複を削除できます。

于 2013-07-02T20:21:26.503 に答える