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

时间:2013-12-20 10:17:40

标签: 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;

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

SELECT
    COALESCE(OVER_BID_PRICE, -1)
FROM
    AUCTION_CAR_BID
WHERE
    BID_SEQ = 2354435345;

另一个:

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;

但如果 id 不在我的表格中,我总是得到空字符串值(不是-1)。

任何建议都会非常感激!

4 个答案:

答案 0 :(得分:4)

这个怎么样:

select
case when price is null or id <> 1
then -1
else price
end price
from mytable

答案 1 :(得分:4)

如果你这样写:

SELECT
    COALESCE(OVER_BID_PRICE, -1)
FROM
    AUCTION_CAR_BID
WHERE
    BID_SEQ = 2354435345;

结果可以是两种类型。

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

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

要解决此问题,您可以尝试:

SELECT COALESCE(
   (SELECT
   COALESCE(OVER_BID_PRICE, -1)
   FROM AUCTION_CAR_BID
   WHERE BID_SEQ = 2354435345)
,-1);

告诉我它是否正常

答案 2 :(得分:2)

DROP TABLE prices;

CREATE TABLE prices (price_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,price INT NULL);

INSERT INTO prices (price) VALUES (' '),(''),(NULL);

SELECT * FROM prices;
+----------+-------+
| price_id | price |
+----------+-------+
|        1 |     0 |
|        2 |     0 |
|        3 |  NULL |
+----------+-------+

SELECT price_id,COALESCE(price,-1) price FROM prices;
+----------+-------+
| price_id | price |
+----------+-------+
|        1 |     0 |
|        2 |     0 |
|        3 |    -1 |
+----------+-------+

答案 3 :(得分:2)

如果表中没有USER_SEQ = 2354435345的行,则不返回任何行。但是,即使结果为空,聚合函数也总是返回一行: - )

SELECT
    COALESCE(MIN(OVER_BID_PRICE), -1)
FROM
    USER_PARAM
WHERE
    USER_SEQ = 2354435345;