开发者社区 问答 正文

MySQL在更新查询中设置局部变量

已解决

我在存储过程中有以下查询:

SET @myVar = '';

UPDATE my_table t1 SET t1.field1 = CASE WHEN -- set @myVar to 'one' when this exists is true EXISTS ( SELECT 1 FROM table2 t2 WHERE t1.field1 = t2.field1 ) OR -- set @myVar to 'two' when this exists is true EXISTS ( SELECT 1 FROM table3 t3 WHERE t1.field1 = t3.field1 ) THEN FALSE ELSE TRUE END, t1.field3 = CASE WHEN @myVar = 'one' THEN 'okay' WHEN @myVar = 'two' THEN 'not okay' ELSE 'netural' END WHERE t1.field5 = 'value';

有没有一种方法我可以设置在一个局部变量的一些标志值(“一”,“二”,等...),当第一或第二EXISTS条件是在真正CASE的第一条set。然后,我想使用该标志值设置另一个字段。

这样的事情可能吗?我搜索了一段时间,但似乎无法为该问题找到足够的解决方案。

展开
收起
保持可爱mmm 2019-12-13 10:31:18 368 分享 版权
1 条回答
写回答
取消 提交回答
  • 采纳回答

    该选择查询为您提供1作为答案,并将@myvar设置为1

    SELECT IF(IF(EXISTS (SELECT 1 FROM df t3 WHERE 1 = 1), @myVar :='one',0) = 'one',1,0); SELECT @myVar;

    所以尝试

    UPDATE my_table t1 SET t1.field1 = CASE WHEN IF(IF(
    EXISTS ( SELECT 1 FROM table2 t2 WHERE t1.field1 = t2.field1 ), @myVar :='one',0) = 'one',1,0) OR IF(IF( EXISTS ( SELECT 1 FROM table3 t3 WHERE t1.field1 = t3.field1 ), @myVar :='two',0) = 'one',1,0) THEN FALSE ELSE TRUE END, t1.field3 = CASE WHEN @myVar = 'one' THEN 'okay' WHEN @myVar = 'two' THEN 'not okay' ELSE 'netural' END WHERE t1.field5 = 'value';

    它不会给出错误,但是如果没有数据,则必须自己进行测试

    而且我不确定会话变量是否具有vqalue。就像我说没有数据。

    但是仍然将会话预先设置为可变,因此在更新语句中没有意义。

    问题来源于stack overflow

    2019-12-13 10:31:45
    赞同 展开评论