多更新查询mysql
我有一个表,其中主键是两列的组合。我想根据主键更新多行多更新查询mysql,mysql,Mysql,我有一个表,其中主键是两列的组合。我想根据主键更新多行 StationId ServerDate Status 1 2011-05-05 01:00:00 0 1 2011-05-06 01:00:00 1 2 2011-05-05 01:00:00 2 我的更新查询当前看起来像 Update data set status = 1 where StationId = '1' and ServerDate =
StationId ServerDate Status
1 2011-05-05 01:00:00 0
1 2011-05-06 01:00:00 1
2 2011-05-05 01:00:00 2
我的更新查询当前看起来像
Update data set status = 1 where StationId = '1' and ServerDate = '2011-05-05 01:00:00'
Update data set status = 2 where StationId = '1' and ServerDate = '2011-05-06 01:00:00'
我曾考虑过使用语句,但当键是两个键的组合时,我想不出如何使用它。这是我使用编写的查询。它改变了我所有的行。如果当前记录不符合任何when条件(如记录3),则其将更改为默认值0。我希望该记录保留以前的值
UPDATE data set status = CASE
WHEN StationId = '1' and ServerDate = '2011-05-05 01:00:00' THEN 1
WHEN StationId = '1' and ServerDate = '2011-05-06 01:00:00' THEN 2
END
当您处理多行时,您可以将StationId作为索引,以便更快地查询
mysql>CREATE INDEX index_name ON tableName(StationId);
当您处理多行时,您可以将StationId作为索引,以便更快地查询
mysql>CREATE INDEX index_name ON tableName(StationId);
这是我用CASE编写的查询,但在查询中出现了错误
删除END关键字后的大小写,应该可以:
UPDATE data
SET status =
CASE
WHEN stationId = '1' and ServerDate = '2011-05-05 01:00:00' THEN 1
WHEN stationId = '1' and ServerDate = '2011-05-06 01:00:00' THEN 2
WHEN stationId = '2' and ServerDate = '2011-05-05 01:00:00' THEN 3
END
WHERE stationId IN ('1', '2')
AND ServerDate in ('2011-05-05 01:00:00', '2011-05-06 01:00:00')
这是我用CASE编写的查询,但在查询中出现了错误
删除END关键字后的大小写,应该可以:
UPDATE data
SET status =
CASE
WHEN stationId = '1' and ServerDate = '2011-05-05 01:00:00' THEN 1
WHEN stationId = '1' and ServerDate = '2011-05-06 01:00:00' THEN 2
WHEN stationId = '2' and ServerDate = '2011-05-05 01:00:00' THEN 3
END
WHERE stationId IN ('1', '2')
AND ServerDate in ('2011-05-05 01:00:00', '2011-05-06 01:00:00')
您的查询应为:编辑
UPDATE data set status =
(
CASE
WHEN StationId = '1' AND ServerDate = '2011-05-05 01:00:00' THEN 1
WHEN StationId = '2' AND ServerDate = '2011-05-06 01:00:00' THEN 2
END
)
WHERE StationId IN ('1','2')
您的查询应为:编辑
UPDATE data set status =
(
CASE
WHEN StationId = '1' AND ServerDate = '2011-05-05 01:00:00' THEN 1
WHEN StationId = '2' AND ServerDate = '2011-05-06 01:00:00' THEN 2
END
)
WHERE StationId IN ('1','2')
你只需要取下你的最后一个箱子
UPDATE data set status = CASE
WHEN StationId = '1' and ServerDate = '2011-05-05 01:00:00' THEN 1
WHEN StationId = '1' and ServerDate = '2011-05-06 01:00:00' THEN 2
END
你只需要取下你的最后一个箱子
UPDATE data set status = CASE
WHEN StationId = '1' and ServerDate = '2011-05-05 01:00:00' THEN 1
WHEN StationId = '1' and ServerDate = '2011-05-06 01:00:00' THEN 2
END
由于StationId和ServerDate是组合主键,因此我认为不需要为我的StationId编制索引。我将始终使用StationId和ServerDate的组合进行搜索。我不想在多个步骤中更新。我只想使用一个查询来更新Lynce StationId和ServerDate是组合主键,我认为我不需要索引我的StationId。我将始终使用StationId和ServerDate的组合进行搜索。我不想在多个步骤中更新。我只想使用一个查询进行更新yyaa我现在删除了该错误。这本手册最后终于出版了。现在我有另一个问题。我已经编辑了我的问题。看一看,我现在把那个错误删除了。这本手册最后终于出版了。现在我有另一个问题。我已经编辑了我的问题。当案例设置为默认值时,查找不属于任何类别的记录。如何停止该操作?在这种情况下,如果我需要更新两个不同StationID(如record 2和record 3)的记录,那么我应该怎么做?您必须将条件添加到where,并将station id的检查移回case语句。请参见我的编辑,您需要更改WHERE条件以反映您真正想要更新的内容。我的示例可能不是您想要的。您的case语句中可以有一个ID限制子句,也可以有一个where子句来防止编辑未指定的ID。我相信您可以调整我的示例以支持该要求。对于不属于任何类别的记录,当case设置为默认值时。如何停止该操作?在这种情况下,如果我需要更新两个不同StationID(如record 2和record 3)的记录,那么我应该怎么做?您必须将条件添加到where,并将station id的检查移回case语句。请参见我的编辑,您需要更改WHERE条件以反映您真正想要更新的内容。我的示例可能不是您想要的。您的case语句中可以有一个ID限制子句和一个where子句,以防止编辑未指定的ID。我相信您可以调整我的示例以支持该要求。