2

タイトルをどうしようか悩みましたが、簡単に説明すると・・・

私は2つのテーブルを持っています

表1:

--------------------------------------------------------------
| id  |        start        |         end         | duration |
-------------------------------------------------------------
|  1  | 2013-10-01 09:00:00 | 2013-10-01 09:30:00 |    30    |
-------------------------------------------------------------
|  2  | 2013-10-02 10:00:00 | 2013-10-02 10:30:00 |    30    |
--------------------------------------------------------------
| int |      datetime       |       datetime      |   int    |
--------------------------------------------------------------

表 2:

---------------------------------------------------
| id  |        start        |         end         |
---------------------------------------------------
|  3  | 2013-10-01 09:00:00 | 2013-10-01 17:00:00 |
---------------------------------------------------
|  4  | 2013-10-02 09:00:00 | 2013-10-02 17:00:00 |
---------------------------------------------------
| int |      datetime       |       datetime      |
---------------------------------------------------

私がやろうとしているのは、テーブル #2 からすべてのレコードを取得し、同じ日付で同じ日時内にあるテーブル #1 の行と一致し、テーブル #1 から時間を削除して結果セットを変更することです...

結果の例は次のようになります...

---------------------------------------------------------
| table2id  |        start        |         end         |
---------------------------------------------------------
|     3     | 2013-10-01 09:30:00 | 2013-10-01 17:00:00 |
---------------------------------------------------------
|     4     | 2013-10-02 09:00:00 | 2013-10-02 10:00:00 |
---------------------------------------------------------
|     4     | 2013-10-02 10:30:00 | 2013-10-02 17:00:00 |
---------------------------------------------------------

これはどのように達成できますか?

4

2 に答える 2

0
SELECT Table2.id, Table1.end_date , Table2.end_date 
FROM table1 AS Table1, table2 AS Table2
WHERE 
    Table1.start_date >= Table2.start_date 
    AND Table1.end_date <= Table2.end_date
UNION 
SELECT Table2.id, Table2.start_date , Table1.start_date 
FROM table1 AS Table1, table2 AS Table2
WHERE 
    Table1.start_date >= Table2.start_date 
    AND Table1.end_date <= Table2.end_date

startこれは機能しますが、同じレコードが追加endされ、手動で削除する必要があります

---------------------------------------------------------
| table2id  |        start        |         end         |
---------------------------------------------------------
|     3     | 2013-10-01 09:30:00 | 2013-10-01 17:00:00 |
|     4     | 2013-10-02 10:30:00 | 2013-10-02 17:00:00 |
|     3     | 2013-10-01 09:00:00 | 2013-10-01 09:00:00 | --> Extra Record
|     4     | 2013-10-02 09:00:00 | 2013-10-02 10:00:00 |
于 2013-10-01T13:24:36.707 に答える
0

このロジックが正しいかどうかはわかりませんが、次のようなものが探しているものに近いかもしれません。

UPDATE tbl2
SET start = (SELECT end FROM tbl1 WHERE start = tbl2.start)

これら 2 つのテーブルがどのように関連しているかは、あまり明確ではありません。しかし、id 明らかにそうではありません。この例で一致する値は 2 つだけstartです。

于 2013-10-01T12:24:26.097 に答える