0

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

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

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

更新
table
tablelocationType = 5 在哪里 tablelocationType = 0 和 tableorderFromEnterprise = 0;

但我还需要使用重复数据创建另一条记录并将 locationType 设置为 6。我在处理其中一些 SQL 语句时遇到问题,非常感谢任何帮助!!!!

4

3 回答 3

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

它不在一个语句中,但它会完成工作,如果您担心不一致,那么只需围绕这两个操作包装一个事务

于 2011-03-31T19:16:30.693 回答
1

您不能在 UPDATE 语句中执行此操作, update 仅更新表中已有的内容。

如果您想复制更改一个字段的条目,您可以执行以下操作:

INSERT table_name (cityID, stateID , orderEnterpriseID, isDefault, locationType)
SELECT cityID, stateID , orderEnterpriseID, isDefault, 6
FROM table_name

(请注意,所有这些都作为一个语句执行)还请注意,我们从表中选择了6而不是 locationType。

我们在这里所做的只是选择表格中的所有内容,将位置类型替换为 6 并将其插入回表格中。

于 2011-03-31T19:17:25.930 回答
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;
于 2011-03-31T19:18:14.873 回答