1. ホーム
  2. mysql

[解決済み] MySQL - SELECTクエリに基づくUPDATEクエリ

2022-03-16 06:02:38

質問内容

私は(同じテーブルから)日付-時間に基づいた2つのイベントの間に関連性があるかどうかを確認する必要があります。

1つのデータセットには、特定のイベントの終了日時が含まれ、もう1つのデータセットには、他のイベントの開始日時が含まれます。

1つ目のイベントが2つ目のイベントより先に終了している場合、それらをリンクさせたい。

これまで持っているのは

SELECT name as name_A, date-time as end_DTS, id as id_A 
FROM tableA WHERE criteria = 1


SELECT name as name_B, date-time as start_DTS, id as id_B 
FROM tableA WHERE criteria = 2

そして合流する。

SELECT name_A, name_B, id_A, id_B, 
if(start_DTS > end_DTS,'VALID','') as validation_check
FROM tableA
LEFT JOIN tableB ON name_A = name_B

validation_checkフィールドに基づいて、SELECTをネストしたUPDATEクエリを実行することは可能ですか?

どのように解決するのですか?

実はこれには2つの方法があるんです。

MySQL update join 構文。

UPDATE tableA a
INNER JOIN tableB b ON a.name_a = b.name_b
SET validation_check = if(start_dts > end_dts, 'VALID', '')
-- where clause can go here

ANSI SQL 構文。

UPDATE tableA SET validation_check = 
    (SELECT if(start_DTS > end_DTS, 'VALID', '') AS validation_check
        FROM tableA
        INNER JOIN tableB ON name_A = name_B
        WHERE id_A = tableA.id_A)

あなたが最も自然だと思うものを選んでください。