我尝试编写一个查询来纠正表中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
如果它不是 NULL 而 DATE(CreateDate)则为其他。
我一直在尝试使用 IF 来实现此目的,但我在撰写有效的内容时遇到了问题......
还有一件事, transactionsdetails 是指 transactionsheaders 到 TransactionUID (1到多个)。 GROUP BY 是否保证只返回一个结果?
答案 0 :(得分: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'或甚至日期(now())