我有一个查询,试图将只有空字符串的单元格更新为NULL。但是,相反,当我运行此命令时,所有单元格最终都为NULL:
UPDATE table_name
SET InvoiceId=NULL,
LinkedAccountId=NULL,
RecordId=NULL,
ProductName=NULL,
RateId=NULL,
SubscriptionId=NULL,
PricingPlanId=NULL,
UsageType=NULL,
Operation=NULL,
AvailabilityZone=NULL,
ReservedInstance=NULL,
UsageStartDate=NULL,
UsageEndDate=NULL,
UsageQuantity=NULL,
BlendedRate=NULL,
UnBlendedRate=NULL,
ResourceId=NULL,
Engagement=NULL,
Name=NULL,
Owner=NULL,
Parent=NULL
WHERE InvoiceId=''
OR LinkedAccountId=''
OR RecordId=''
OR ProductName=''
OR RateId=''
OR SubscriptionId=''
OR PricingPlanId=''
OR UsageType=''
OR UsageEndDate=''
OR Operation=''
OR AvailabilityZone=''
OR ReservedInstance=''
OR UsageStartDate=''
OR UsageEndDate=''
OR UsageQuantity=''
OR BlendedRate=''
OR UnBlendedRate=''
OR ResourceId=''
OR Engagement=''
OR Name=''
OR Owner=''
OR Parent='';
我在做什么错了?
答案 0 :(得分:2)
您正在将所有字段设置为NULL
,其中任何字段= ''
您可能需要编写与要更新的字段一样多的查询。
我可能是错的,但是我认为这不可能在单个查询中完成
UPDATE table_name
SET InvoiceId = NULL
WHERE InvoiceId = ''
每个字段都有这个
答案 1 :(得分:2)
解释SQL查询的方法如下:
UPDATE table_name
SET
(all these fields to null)
WHERE
(if ANY Of these conditions is true)
我同意Cid的观点,一次在每个查询中执行1个字段可能是最安全的方法,但这是您可以在单个查询中编写此字段的方法:
UPDATE table_name SET
field1 = IF(field1='',NULL,field1),
field2 = IF(field2='',NULL,field2),
/* etc */
答案 2 :(得分:1)
我认为您假设WHERE子句中的术语与SET子句中的分配具有隐式关联,因此将仅设置某些列,具体取决于哪些列满足WHERE子句中的各个术语。这不是SQL的工作方式。
真正发生的是,对WHERE子句的 whole 条件进行了评估,以选择受影响的行。然后应用 all SET分配,因此将在满足整个WHERE子句条件的行上更改所有列。
要一次性完成您想做的事情,您可以通过以下方式做到这一点:
UPDATE table_name
SET InvoiceId=NULLIF(InvoiceId, ''),
LinkedAccountId=NULLIF(LinkedAccountId, ''),
RecordId=NULLIF(RecordId, ''),
ProductName=NULLIF(ProductName, ''),
RateId=NULLIF(RateId, ''),
SubscriptionId=NULLIF(SubscriptionId, ''),
PricingPlanId=NULLIF(PricingPlanId, ''),
UsageType=NULLIF(UsageTYpe, ''),
Operation=NULLIF(Operation, ''),
AvailabilityZone=NULLIF(AvailabilityZone, ''),
ReservedInstance=NULLIF(ReservedInstance, ''),
UsageStartDate=NULLIF(UsageStartDate, ''),
UsageEndDate=NULLIF(UsageEndDate, ''),
UsageQuantity=NULLIF(UsageQuantity, ''),
BlendedRate=NULLIF(BlendedRate, ''),
UnBlendedRate=NULLIF(UnBlendedRate, ''),
ResourceId=NULLIF(ResourceId, ''),
Engagement=NULLIF(Engagement, ''),
Name=NULLIF(Name, ''),
Owner=NULLIF(Owner, ''),
Parent=NULLIF(Parent, '')
如果NULLIF() function的两个参数相等,则返回NULL,否则返回第一个参数。因此,如果每列不是 ''
,则它是空操作,将列设置为其自己的原始值。