问题描述
我有一个包含值的表,我需要计算一个字段,其中两行值相减,我已经编写了以下查询,但它不起作用并且通过了 JOIN 错误。
UPDATE TempTbl,((SELECT TempTbl.Cal_Value FROM TempTbl WHERE (((TempTbl.PHD_TAG)="31FC1064.PV")))-(SELECT TempTbl.Cal_Value FROM TempTbl WHERE (((TempTbl.PHD_TAG)="31FC2064.PV")))) AS A SET TempTbl.Cal_Value = "A"
WHERE (((TempTbl.ASSET_DESC)="OAG net flaring"));
感谢您的帮助
解决方法
您的连接表必须是表而不是值
另外你必须注意,你的子选择总是只返回 1 个值,否则你会得到 ab 错误
此版本适用于 MySQL
UPDATE
TempTbl,(SELECT
(SELECT TempTbl.Cal_Value FROM TempTbl WHERE TempTbl.PHD_TAG ="31FC1064.PV" LIMIT 1)
- (SELECT TempTbl.Cal_Value FROM TempTbl WHERE TempTbl.PHD_TAG="31FC2064.PV" LIMIT 1)
) AS A
SET TempTbl.Cal_Value = "A"
WHERE (TempTbl.ASSET_DESC="OAG net flaring");
这是访问权限
UPDATE
TempTbl,(SELECT
(SELECT TOP 1 TempTbl.Cal_Value FROM TempTbl WHERE TempTbl.PHD_TAG ="31FC1064.PV" )
- (SELECT TOP 1 TempTbl.Cal_Value FROM TempTbl WHERE TempTbl.PHD_TAG="31FC2064.PV" )
FROM TempTbl) AS A
SET TempTbl.Cal_Value = "A"
WHERE (TempTbl.ASSET_DESC="OAG net flaring");
我在这个 shouölb 中添加了一个版本,提示您如何进行此类查询
UPDATE
TempTbl INNER JOIN (SELECT TempTbl.ASSET_DESC,(SELECT TOP 1 TempTbl.Cal_Value FROM TempTbl WHERE TempTbl.PHD_TAG ="31FC1064.PV" )
-(SELECT TOP 1 TempTbl.Cal_Value FROM TempTbl WHERE TempTbl.PHD_TAG ="31FC1064.PV" )
FROM TempTbl
WHERE (((TempTbl.PHD_TAG)="31FC1064.PV"))
) AS A ON A.ASSET_DESC = TempTbl.ASSET_DESC
SET TempTbl.Cal_Value = "A"
WHERE (TempTbl.ASSET_DESC="OAG net flaring");