zoukankan      html  css  js  c++  java
  • Mysql update语句赋值嵌套与在表列中数据后面增加数据

    点击(此处)折叠或打开

    1. update a set col=(select col from a where id='5') where id>5 and id<10;

    报错了
    ERROR 1093 (HY000): You can't specify target table 'a' for update in FROM clause

    经过研究

    发现是 mysql 定义update语句不能同时对同一张进行set 赋值操作,也就是说
    update a 的时候 不能在后面select col from a ,如果是不同表操作是没有问题的。

    想到一个解决方法:

    点击(此处)折叠或打开

    1. update a set col=(select col from (select * from a ) as b where id='5' )where id>5 and id <10;

    将select那里的a的表起一个别名b 就可以解决这个问题
     
     
    update mem_player set `DataWarehouse`=(select `DataWarehouse` from (select * from mem_player) as b where `Pid`=100000) 

    2、SQL— CONCAT(字符串连接函数)

    有的时候,我们有需要将由不同栏位获得的资料串连在一起。每一种资料库都有提供方法来达到这个目的:

    • MySQL: CONCAT()
    • Oracle: CONCAT(), ||
    • SQL Server: +

    CONCAT() 的语法如下:

    CONCAT(字串1, 字串2, 字串3, ...): 将字串1、字串2、字串3,等字串连在一起。

    请注意,Oracle的CONCAT()只允许两个参数;

    换言之,一次只能将两个字串串连起来。不过,在Oracle中,我们可以用'||'来一次串连多个字串。

    来看几个例子。假设我们有以下的表格:

    Geography 表格

    region_name store_name
    East Boston
    East New York
    West Los Angeles
    West San Diego

    例子1:

    MySQL/Oracle:
    SELECT CONCAT(region_name,store_name) FROM Geography
    WHERE store_name = 'Boston';

    结果

    'EastBoston'

    例子2:

    Oracle:
    SELECT region_name || ' ' || store_name FROM Geography
    WHERE store_name = 'Boston';

    结果

    'East Boston'

    例子3:

    SQL Server:
    SELECT region_name + ' ' + store_name FROM Geography
    WHERE store_name = 'Boston';

    结果

    'East Boston'

    3、添加分隔符

    concat_ws()函数, 表示concat with separator,即有分隔符的字符串连接

        如连接后以逗号分隔

            mysql> select concat_ws(',','11','22','33');

            +-------------------------------+

            | concat_ws(',','11','22','33') |

            +-------------------------------+

            | 11,22,33                      |

            +-------------------------------+

           1 row in set (0.00 sec)

       和concat不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL

            mysql> select concat_ws(',','11','22',NULL);

            +-------------------------------+

            | concat_ws(',','11','22',NULL) |

            +-------------------------------+

            | 11,22                         |

            +-------------------------------+

           1 row in set (0.00 sec)

    下面是我的使用
    1. UPDATE `trace_sys`.`goods_production` SET `image` =
    2. (SELECT CONCAT_WS("?",image,"1") FROM (SELECT * FROM goods_production ) AS b WHERE `goodsid` = '1' ) WHERE `goodsid` = '1';

     









  • 相关阅读:
    深入解析 float
    解决 css 浮动后 父元素高度失效问题
    高性能 Socket 组件 HP-Socket v3.2.1-RC1 公布
    基于lucene.net 和ICTCLAS2014的站内搜索的实现1
    史上最简单的个人移动APP开发入门--jQuery Mobile版跨平台APP开发
    【OpenCV新手教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
    栈模拟队列 队列模拟栈
    状态机的两种写法
    Hadoop-2.2.0中文文档—— MapReduce 下一代--容量调度器
    OpenGLES 与 WebGL 中顶点属性的组织格式的误解
  • 原文地址:https://www.cnblogs.com/wang3680/p/144cca7633e554589f81fcc8ec3cb4ec.html
Copyright © 2011-2022 走看看