如果列值为NULL,如何实现默认值?

Cat*_*ysm 5 mysql sql

我想从这些条件中检索表中的一些列值.

  • 如果value为NULL(或)Empty String,则返回一些用户定义的值
  • 如果不是上述条件,则返回它的值.

我怎么能搞清楚?

这是我的表查询..

CREATE TABLE AUCTION_CAR_BID(
bid_seq bigint NOT NULL AUTO_INCREMENT,
auction_car_seq bigint NOT NULL,
bid_group_seq bigint NOT NULL,
bid_price int DEFAULT 0 NOT NULL,
over_bid_price int DEFAULT -1 NOT NULL,
result_id int DEFAULT 0 NOT NULL,
remark varchar(500),
PRIMARY KEY (bid_seq)) 
ENGINE = InnoDB DEFAULT CHARACTER SET utf8;
Run Code Online (Sandbox Code Playgroud)

这是我努力的代码来获得它..

SELECT
    COALESCE(OVER_BID_PRICE, -1)
FROM
    AUCTION_CAR_BID
WHERE
    BID_SEQ = 2354435345;
Run Code Online (Sandbox Code Playgroud)

另一个:

SELECT
    CASE
        WHEN OVER_BID_PRICE IS NULL
        OR TRIM(OVER_BID_PRICE) = '' THEN -1
        ELSE OVER_BID_PRICE
    END OVER_BID_PRICE
FROM
    AUCTION_CAR_BID
WHERE
    BID_SEQ = 2354435345;
Run Code Online (Sandbox Code Playgroud)

但是如果给定的id不在我的表中,我总是得到空的String值(不是-1).

任何建议将非常感谢!

Joe*_*ras 5

如果你这样写:

SELECT
    COALESCE(OVER_BID_PRICE, -1)
FROM
    AUCTION_CAR_BID
WHERE
    BID_SEQ = 2354435345;
Run Code Online (Sandbox Code Playgroud)

结果可以有两种类型。

第一个结果:您的查询没有返回行!您的 WHERE 条件不满足,因此您将读取 NULL

第二个结果:您的查询返回行,但字段的值为 NULL,您的 COALESCE 在这种情况下工作正常

要解决您可以尝试以下操作:

SELECT COALESCE(
   (SELECT
   COALESCE(OVER_BID_PRICE, -1)
   FROM AUCTION_CAR_BID
   WHERE BID_SEQ = 2354435345)
,-1);
Run Code Online (Sandbox Code Playgroud)

告诉我是否可以