更新Mysql(如果2列为空,则转到下2列)

更新Mysql(如果2列为空,则转到下2列),mysql,Mysql,从上面的正确答案链接中,我想跟进另一个问题。因为我要做的就是在这组字段为空时更新字段集,否则将更新到另一组字段,而不仅仅是一列。 还有一种情况: 1.)如果subjectColumnA、timeColumnA、dataColumnA为NULL更新字段 2.)如果subjectColumnA、timeColumnA、dataColumnA为Not NULL且subjectColumnB、timeColumnB、dataColumnB为NULL更新字段subjectColumnB、timeColum

从上面的正确答案链接中,我想跟进另一个问题。因为我要做的就是在这组字段为空时更新字段集,否则将更新到另一组字段,而不仅仅是一列。 还有一种情况:

1.)如果
subjectColumnA、timeColumnA、dataColumnA
NULL
更新字段

2.)如果
subjectColumnA、timeColumnA、dataColumnA
Not NULL
subjectColumnB、timeColumnB、dataColumnB
NULL
更新字段
subjectColumnB、timeColumnB、dataColumnB

等等

从@ravinder的查询中,我想问一下这个场景: 让我们假设这是表格的内容

+------+------+------+------+------+------+------+------+------+------+
| id   | AAA1 | BBB1 | CCC1 | AAA2 | BBB2 | CCC2 | AAA3 | BBB3 | CCC3 |
+------+------+------+------+------+------+------+------+------+------+
|    1 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
+------+------+------+------+------+------+------+------+------+------+
根据上述条件,我提到的“AAA1、BBB1和CCC1”为
NULL
,因此该列将被更新。结果是这样的

+------+------+------+------+------+------+------+------+------+------+
| id   | AAA1 | BBB1 | CCC1 | AAA2 | BBB2 | CCC2 | AAA3 | BBB3 | CCC3 |
+------+------+------+------+------+------+------+------+------+------+
|    1 |    2 |    2 |    2 | NULL | NULL | NULL | NULL | NULL | NULL |
+------+------+------+------+------+------+------+------+------+------+
另一个实例是,当“AAA1、BBB1、CCC1”为“非空”时,将更新“AAA2、BBB2和CCC2”,结果如下所示

+------+------+------+------+------+------+------+------+------+------+
| id   | AAA1 | BBB1 | CCC1 | AAA2 | BBB2 | CCC2 | AAA3 | BBB3 | CCC3 |
+------+------+------+------+------+------+------+------+------+------+
|    1 |    3 |    3 |    3 | NULL | NULL | NULL | NULL | NULL | NULL |
+------+------+------+------+------+------+------+------+------+------+
有可能吗??因为我从其他人那里读到的问题和答案使用了CASE和If,并且只使用了2个参数。我尝试过这样的查询,但失败了

UPDATE table SET
    AAA3 = IF( AAA2 IS NOT NULL, 2, AAA3 ) AND BBB3 = IF( BBB2 IS NOT NULL, 2, BBB3 ),
    AAA2 = IF( AAA1 IS NOT NULL, 2, AAA2 ) AND BBB2 = IF( BBB1 IS NOT NULL, 2, BBB2 ),
    AAA1 = IF( AAA1 IS NULL, 1, AAA1 ) AND BBB1 = IF( AAA1 IS NULL, 1, BBB1 );

如果没有示例数据和所需的输出,很难回答这个问题,但是使用您提供的链接和上面的伪语法,您应该能够以完全相同的方式完成:

UPDATE TableName SET 
subjectColumnA = ( case when subjectColumnA is null 
                        AND timeColumnA is null 
                        AND dataColumnA is null 
                    then ? 
                    else subjectColumnA end ),
timeColumnA = ( case when subjectColumnA is null 
                        AND timeColumnA is null AND 
                        dataColumnA is null 
                     then ? 
                     else timeColumnA end ),
dataColumnA = ( case when subjectColumnA is null AND 
                        timeColumnA is null AND 
                        dataColumnA is null 
                     then ? 
                     else dataColumnA end ),
subjectColumnB = ( case when subjectColumnA is not null AND 
                        timeColumnA is not null AND 
                        dataColumnA is not null AND 
                        subjectColumnB is null AND 
                        timeColumnB is null AND 
                        dataColumnB is null 
                    then ? 
                    else subjectColumnB end ),
timeColumnB = ( case when subjectColumnA is not null AND 
                        timeColumnA is not null AND 
                        dataColumnA is not null AND 
                        subjectColumnB is null AND 
                        timeColumnB is null AND 
                        dataColumnB is null 
                    then ? 
                    else timeColumnB end ),
dataColumnB = ( case when subjectColumnA is not null AND 
                        timeColumnA is not null AND 
                        dataColumnA is not null AND 
                        subjectColumnB is null AND 
                        timeColumnB is null AND dataColumnB is null 
                    then ?
                    else dataColumnB end )
实际上,只需添加您的标准,如果未满足,请在您的else中更新回自身

--编辑

使用上面的查询,您仍然可以使用CASE--works,与IIF相同:

UPDATE table SET
    AAA3 = CASE WHEN AAA2 IS NOT NULL THEN 2 ELSE AAA3 END,
    BBB3 = CASE WHEN BBB2 IS NOT NULL THEN 2 ELSE BBB3 END,
    AAA2 = CASE WHEN AAA1 IS NOT NULL THEN 2 ELSE AAA2 END,
    BBB2 = CASE WHEN BBB1 IS NOT NULL THEN 2 ELSE BBB2 END,
    ...

祝你好运。

如果subjectColumnA和timeColumnA为空,dataColumnA不为空,结果会是什么?谢谢你的快速回复。我问这个问题,是否可以使用when条件一次更新3个列字段。很抱歉,我将对帖子进行更具体的编辑。@sgedes:我喜欢你的解决方案,它很棒,但代码似乎很长,因此如果可能的话,我想把它缩短一些。我已经编辑了我的答案——如果我误解了你的where标准,请告诉我。我刚才使用了上面的查询和CASE,它的工作原理与IIF相同,如果需要嵌套的IFs,可以将CASE串在一起。祝你好运。谢谢。它现在可以工作了,只需稍加修改。:)我使用了你的查询,然后在我的php中添加了一些东西。