0

我有这样的声明:

UPDATE `MyTable` 
SET point = point + 1 
WHERE (mySubject = 'MATHEMATICS' AND myGrade = '100') OR 
      (mySubject = 'PHYSICS' AND myGrade = '75') OR 
      (mySubject = 'PHYSICS' AND myGrade = '75')

我希望将表格更新为:

MATHEMATICS | 100 |  1
PHYSICS     | 75  |  2

代替

PHYSICS     | 75  | 1

出现重复的“物理”条件的原因是因为我从另一个函数中获取了这些信息。而且我想知道如果另一个函数通过我的 PHYSICS 2 次,我是否可以将 PHYSICS 点增加 2。

有没有办法在一个连接中执行此操作,而不是调用 UPDATE 3 次:

UPDATE `MyTable` SET point = point + 1 WHERE mySubject = 'MATHEMATICS' AND myGrade = '100'
UPDATE `MyTable` SET point = point + 1 WHERE mySubject = 'PHYSICS' AND myGrade = '75'
UPDATE `MyTable` SET point = point + 1 WHERE mySubject = 'PHYSICS' AND myGrade = '75'
4

1 回答 1

2

当您对表进行更新时,它只需要每行一次。所以它不会为物理生成 2 次更新...

    UPDATE `MyTable` 
SET point = point + 1 
WHERE (mySubject = 'MATHEMATICS' AND myGrade = '100') OR 
      (mySubject = 'PHYSICS' AND myGrade = '75') OR 
      (mySubject = 'PHYSICS' AND myGrade = '75')

这个查询说的是 SQL .. 为我更新 MyTable WHERE (case a) or (case b) or (case c) 中的所有行

SQL 需要数学,并且在情况下它的 OK 和更新。然后它需要物理,在案例 b 中它们是好的并更新,然后是 sql FINISH,因为表中没有更多的 ROWS..

您必须进行 2 次单独更新才能完成您的工作。

UPDATE `MyTable` SET point = point + 1 WHERE mySubject = 'MATHEMATICS';
UPDATE `MyTable` SET point = point + 2 WHERE mySubject = 'PHYSICS';

或者你可以使用 CASE

UPDATE  `MyTable` SET point = 
        CASE
        WHEN mySubject = 'MATHEMATICS' THEN
                (point+1)
        WHEN mySubject = 'PHYSICS' THEN
                (point+2)
        END
于 2012-10-25T04:44:05.113 回答