0

テーブルの DATETIME フィールドのエラーを修正するクエリを作成しようとしていますが、サブクエリは transactiondetails として NULL を返すことがあり、CreateDate フィールドには有効な値が必要です。

私の現在のクエリはこれです:

UPDATE transactionsheaders H SET CreateDate = 
    CONCAT(
    DATE((SELECT CreateDate FROM transactionsdetails WHERE TransactionUID=H.UID GROUP BY TransactionUID)),
    ' ',
    TIME(CreateDate)) 
WHERE UID>0;

の結果を使いたい

SELECT CreateDate FROM transactionsdetails WHERE TransactionUID=H.UID GROUP BY TransactionUID

NULLでない場合、それ以外の場合はDATE(CreateDate)

この目的でIFを使用しようとしましたが、機能するものを書くのに問題があります...

もう 1 つ、transactiondetailsはTransactionUID (1 から多数) を介してtransactionsheadersを参照します。GROUP BYは1 つの結果のみを返すことが保証されていますか?

4

1 に答える 1

1

これが正しいことです

UPDATE transactionsheaders H
SET CreateDate = CONCAT(DATE(ifnull((SELECT
                       CreateDate
                     FROM transactionsdetails
                     WHERE TransactionUID = H.UID
                     GROUP BY TransactionUID)),'2012-02-02'), ' ', TIME(CreateDate))
WHERE UID > 0;

'2012-02-02'またはdate(now())のデフォルト値を設定できます。

于 2012-06-29T11:17:40.787 に答える