MySQL UPDATE AND INSERT语句

时间:2011-03-31 19:07:49

标签: mysql insert insert-update

目前有些数据输入不正确,我基本上需要运行一个模式来更新当前记录并插入一个新记录(如果可能,在一个语句中)。该表设置如下:

  cityID            int(10)
  stateID           smallint(5)
  orderEnterpriseID int(10)
  isDefault         tinyint(3)
  locationType      tinying(2)

现在,每条记录的locationType都为0,我需要将其更新为5:

  

UPDATE
  table SET
  tablelocationType   = 5 WHERE tablelocationType   = 0 AND tableorderFromEnterprise   = 0;

但是我还需要创建另一个包含重复数据的记录,并将locationType设置为6.我有一些问题包围了这些SQL语句,并且非常感谢任何帮助!!!!

3 个答案:

答案 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;