0

我试图编写一个查询来纠正表中 DATETIME 字段中的错误,但我的子查询可以返回 NULL 作为 transactiondetails 并且 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

如果它不是NULLDATE(CreateDate)否则。

我一直在尝试为此目的使用IF,但是我在编写有效的东西时遇到了问题......

还有一件事,transactiondetails通过TransactionUID(1 到多个)引用transactionsheaders 。GROUP BY是否保证只返回一个结果?

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 回答