多更新查询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。我相信您可以调整我的示例以支持该要求。