首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL:基于IF更新多列

问MYSQL:基于IF更新多列
EN

Stack Overflow用户
提问于 2014-02-05 18:45:00
回答 2查看 70关注 0票数 0

早上好,我告诉他们我的情况:我有两张桌子:

代码语言:javascript
复制
RATINGS:
GUIDE   varchar(7)
USER    varchar(20)
PRETEST decimal(4,3)
POSTEST decimal(4,3)

RATINGS_PERGUIDE:
USER    varchar(20)
GUIDE1_PRETEST  decimal(4,3)
GUIDE1_POSTEST  decimal(4,3)
GUIDE2_PRETEST  decimal(4,3)
GUIDE2_POSTEST  decimal(4,3)3
.
.
.
GUIDE20_PRETEST decimal(4,3)
GUIDE20_POSTEST decimal(4,3)

表“评级”有一个输入信息的表单,我需要将输入的信息移到"RATINGS_PERGUIDE“表中,我尝试如下:

代码语言:javascript
复制
UPDATE RATINGS , RATINGS_PERGUIDE
IF RATINGS.USER = RATINGS_PERGUIDE.USER AND RATINGS.GUIDE = 'GUIDE 1'
THEN 
SET RATINGS_PERGUIDE.GUIDE1_PRETEST = RATINGS.PRETEST
SET RATINGS_PERGUIDE.GUIDE1_POSTEST = RATINGS.POSTEST
ELSE IF RATINGS.USER = RATINGS_PERGUIDE.USER AND RATINGS.GUIDE = 'GUIDE 2'
THEN 
SET RATINGS_PERGUIDE.GUIDE2_PRETEST = RATINGS.PRETEST;
SET RATINGS_PERGUIDE.GUIDE2_POSTEST = RATINGS.POSTEST;
.
.
.
END IF

但不管用

ie,根据“指南”在表中输入的“评级”更新表中相应的列"RATINGS_PERGUIDE“(24”指南“不同)

同样,如果可以在插入到表中的每个新记录的触发器中完成,“评级”将更好。

请帮帮忙

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-06 02:30:09

我通过观察Phpmyadmin中的“更新”结构找到了解决方案。

代码语言:javascript
复制
UPDATE RATINGS , RATINGS_PERGUIDE
SET RATINGS_PERGUIDE.GUIDE1_PRETEST = (CASE WHEN RATINGS.GUIDE = 'GUIDE 1' THEN RATINGS.PRETEST ELSE RATINGS_PERGUIDE.GUIDE1_PRETEST END),
RATINGS_PERGUIDE.GUIDE1_POSTEST = (CASE WHEN RATINGS.GUIDE = 'GUIDE 1' THEN RATINGS.PRETEST ELSE RATINGS_PERGUIDE.GUIDE1_POSTEST END),
RATINGS_PERGUIDE.GUIDE2_PRETEST = (CASE WHEN RATINGS.GUIDE = 'GUIDE 2' THEN RATINGS.PRETEST ELSE RATINGS_PERGUIDE.GUIDE2_PRETEST END),
RATINGS_PERGUIDE.GUIDE2_POSTEST = (CASE WHEN RATINGS.GUIDE = 'GUIDE 2' THEN RATINGS.PRETEST ELSE RATINGS_PERGUIDE.GUIDE2_POSTEST END),
. . . .
WHERE RATINGS.USER = RATINGS_PERGUIDE.USER

对于我来说,我把它放在一个存储过程中,然后用一个触发器调用

感谢所有的人和Gordon Linoff

票数 0
EN

Stack Overflow用户

发布于 2014-02-05 19:15:05

您正试图在update中完成一个支点,这有点复杂。一种方法是简单地执行多个更新:

代码语言:javascript
复制
update RATINGS_PERGUIDE join
       RATINGS
       on RATINGS.USER = RATINGS_PERGUIDE.USER and
          RATINGS.GUIDE = 'GUIDE 1'
    SET RATINGS_PERGUIDE.GUIDE1_PRETEST = RATINGS.PRETEST,
        RATINGS_PERGUIDE.GUIDE1_POSTEST = RATINGS.POSTEST;

为每个指南修改并重复此更新。

如果您真的想在一个查询中这样做:

代码语言:javascript
复制
update RATINGS_PERGUIDE join
       (select r.user,
               max(case when r.GUIDE = 'GUIDE 1' then pretest end) as pretest_guide1,
               max(case when r.GUIDE = 'GUIDE 1' then posttest end) as posttest_guide1,
               max(case when r.GUIDE = 'GUIDE 2' then pretest end) as pretest_guide2,
               max(case when r.GUIDE = 'GUIDE 2' then posttest end) as posttest_guide2,
               . . .
        from RATINGS r
        group by r.user
       ) r
       on r.USER = RATINGS_PERGUIDE.USER
    SET RATINGS_PERGUIDE.GUIDE1_PRETEST = r.pretest_guide1,
        RATINGS_PERGUIDE.GUIDE1_POSTEST = r.posttest_guide1,
        RATINGS_PERGUIDE.GUIDE2_PRETEST = r.pretest_guide2,
        RATINGS_PERGUIDE.GUIDE2_POSTEST = r.posttest_guide2,
        . . .
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21585808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档