MySQL 中 的IFNNULL 和IF 函数

MySQL 中 的IFNNULL 和IF 函数

最近在工作中遇到一个问题,项目需求是要求做一个面板,前端像我传递id,我通过id去数据库查询
得到想要的一些数据,但是实际中会有一些id查询不到数据,这个时候学到了一个新的mysql函数IFNULL 和IF
当查询的不到的字段想要返回0而不是想没有数据时,我用了IFNULL(expression1,expression2)
当结果是null,返回expression1,不为null返回expression2;
同理好友IF(expression1,expression2,expression3);
如果expression1为true,则执行expression2;否则执行expression3;
sql中的连表查询也要注意,主表的数据一定要小,可以用子查询的结果作为主表,从而提高效率

举个栗子

<select id="selectDemandCurrencyQuantity"
            resultType="com.hzt.trade.dashboard.domain.vo.DashboardAchievementPieCurrencyVO">
        SELECT brand.id brandId, IFNULL(SUM(demand.quantity), 0) AS "quantity",
        IF(currency.code = 'CNY' OR currency.code = 'USD', currency.code, 'OTHER') AS "currencyCode",
        IF(currency.code = 'CNY' OR currency.code = 'USD', currency.name, '其他') AS "currencyName"
        FROM (
          SELECT id, product_id, demand_type, quantity, currency
          FROM hzt_trade.trade_demand
          WHERE ent_id = #{condition.entId,jdbcType=BIGINT}
          AND update_time &gt;= #{condition.beginDate,jdbcType=TIMESTAMP}
          AND update_time &lt;= #{condition.endDate,jdbcType=TIMESTAMP}
          AND is_deleted = 0
          AND demand_type IN (1,2)
          AND parent_id IS NOT NULL
          AND sale_contract_code IS NOT NULL
        ) demand
        LEFT JOIN hzt_config.system_currency currency ON currency.id = demand.currency
        LEFT JOIN hzt_config.base_product product ON product.id = demand.product_id
        LEFT JOIN hzt_config.system_brand brand ON brand.id = product.brand
        WHERE brand.id = #{condition.brandId,jdbcType=BIGINT}
        GROUP BY currencyCode
    </select>

猜你喜欢

转载自blog.csdn.net/AllenJoe666/article/details/84566908
今日推荐