我有这样的陈述:
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'
答案 0 :(得分:2)
当你对表进行UPDATE时,它只需每行一次。 所以它不会为物理学生成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(案例a)或(案例b)或(案例c)
中的所有行SQL需要数学,并且在案例中它可以并且更新。 然后它需要物理学,在案例b他们可以更新然后sql FINISH因为在桌上没有更多的ROWS ..
你必须做两个单独的更新来完成你的工作..
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