目前有些数据输入不正确,我基本上需要运行一个模式来更新当前记录并插入一个新记录(如果可能,在一个语句中)。该表设置如下:
cityID int(10)
stateID smallint(5)
orderEnterpriseID int(10)
isDefault tinyint(3)
locationType tinying(2)
现在,每条记录的locationType都为0,我需要将其更新为5:
UPDATE
table
SET
table
。locationType
= 5 WHEREtable
。locationType
= 0 ANDtable
。orderFromEnterprise
= 0;
但是我还需要创建另一个包含重复数据的记录,并将locationType设置为6.我有一些问题包围了这些SQL语句,并且非常感谢任何帮助!!!!
答案 0 :(得分:1)
首先按照您的描述执行更新:
UPDATE
table SET
table.locationType = 5 WHERE table.locationType = 0 AND table.orderFromEnterprise = 0;
然后复制所有记录并在插入时为它们分配一个6作为位置类型,记得按locationType = 5限制记录,以确保不会复制新添加的记录(不确定这是否是一个问题mysql,但只是为了确定):
INSERT INTO table
(cityID, stateID, orderEnterpriseID, isDefault, locationType)
SELECT t1.cityID, t1.stateID, t1.orderEnterpriseID, t1.isDefault, 6
FROM table as t1
WHERE t1.locationType = 5
它不在一个声明中,但它会完成工作,如果你担心不一致,那么围绕两个操作包装事务。
答案 1 :(得分:1)
您无法在UPDATE语句中执行此操作,仅更新表中已有的更新。
如果您想要复制一个字段,请更改一个字段,您可以执行以下操作:
INSERT table_name (cityID, stateID , orderEnterpriseID, isDefault, locationType)
SELECT cityID, stateID , orderEnterpriseID, isDefault, 6
FROM table_name
(请注意,所有这些都作为一个声明执行) 另请注意,我们从表中选择 6 而不是locationType。
我们在这里做的只是从表格中选择所有内容,将位置类型替换为6并将其重新插入表格。
答案 2 :(得分:1)
我认为不可能在单个查询中执行此操作。但是,您可以插入重复行,并将locationType设置为6,然后将locationTypes更新为0到5.以下是查询:
insert into table (cityID, stateID, orderEnterpriseID, isDefault, locationType)
select cityID, stateID, orderEnterpriseID, isDefault, 6
from table
where locationType = 0 and orderEnterpriseID = 0;
# now your update query
update table
set locationType = 5
where locationType = 0 and orderEnterpriseID = 0;