• mysql 中casewhen用法


    需求:需要在查询出的字段中,判断这个某个字段是否为null,并指定想要的值,

    SELECT
        temp.gId id,
        temp.`name`,
        temp.point,
        temp.give_user_proportion,
        temp.sales_price,
        temp.cover_img,
        temp.limit_num,
        temp.price,
        temp.show_sale_price,
        temp.isPromotion is_promotion
    FROM
        (
            SELECT
                allgoods.gId,
                allgoods.`name`,
                allgoods.sale_num,
                allgoods.point,
                allgoods.give_user_proportion,
                allgoods.sales_price,
                allgoods.cover_img,
                allgoods.modify_date,
                allgoods.productId,
                pi.limit_num,
                pi.price,
                pi.show_sale_price,
                CASE
            WHEN pi.price IS NULL THEN
                FALSE
            ELSE
                TRUE
            END AS isPromotion
            FROM
                (
                    SELECT
                        good.id gId,
                        good.`name`,
                        good.sale_num,
                        good.point,
                        good.give_user_proportion,
                        produc.sales_price,
                        produc.cover_img,
                        produc.modify_date,
                        produc.id productId
                    FROM
                        (
                            SELECT
                                *
                            FROM
                                goods goodstemp
                            WHERE
                                goodstemp.is_del = FALSE
                            AND goodstemp.check_status = 'configed'
                            AND goodstemp.category_id = 174976742484877312
                        ) good
                    LEFT JOIN (
                        SELECT
                            *
                        FROM
                            product p2
                        WHERE
                            p2.is_del = FALSE
                        AND p2.is_putaway = TRUE
                        AND p2.is_show = TRUE
                    ) produc ON good.id = produc.goods_id
                    WHERE
                        good.id = produc.goods_id
                ) allgoods
            LEFT JOIN (
                SELECT
                    *
                FROM
                    promotion prom
                WHERE
                    prom.is_del = FALSE
                AND TO_DAYS(NOW()) >= TO_DAYS(prom.start_date)
                AND TO_DAYS(NOW()) <= TO_DAYS(prom.end_date)
                AND prom.publish_status = 'published'
            ) promotiontemp ON allgoods.gId = promotiontemp.goods_id
            LEFT JOIN promotion_item pi ON promotiontemp.id = pi.promotion_id
        ) temp
    ORDER BY
        temp.isPromotion DESC

    结果:

    当你的表示myisam时:

    SELECT * FROM tbl -- this will do a "table scan". If the table has never had any DELETEs/REPLACEs/UPDATEs, the records will happen to be in the insertion order, hence what you observed.
    大致意思为,一个myisam引擎表在没有任何的删除,修改操作下,执行 select 不带order by,那么会按照插入顺序进行排序。

    If you had done the same statement with an InnoDB table, they would have been delivered in PRIMARY KEY order, not INSERT order. Again, this is an artifact of the underlying implementation, not something to depend on.
    对于innodb引擎表来说,在相同的情况下,select 不带order by,会根据主键来排序,从小到大

  • 相关阅读:
    选择下拉列表,出现不同数据,并计算
    获取td中的数据,保留两位小数重新赋值
    登录注册验证插件
    JS中的call、apply、bind方法详解
    超多经典 canvas 实例,动态离子背景、移动炫彩小球、贪吃蛇、坦克大战、是男人就下100层、心形文字等等等
    js实现冒泡排序
    C# 平方、开方、保留小数 运算
    T4模板循环生成插入语句
    JS数字金额转为大写金额
    Authentication method 'caching_sha2_password' not supported by any of the available plugins.
  • 原文地址:https://www.cnblogs.com/longyao/p/11731095.html
Copyright © 2020-2023  润新知