Mysql 如果值为null,则忽略插入
我有这样的疑问:Mysql 如果值为null,则忽略插入,mysql,Mysql,我有这样的疑问: INSERT INTO price_hist ( date, product_id, price_min, price_max, price_avg, mer
INSERT INTO price_hist
(
date,
product_id,
price_min,
price_max,
price_avg,
merchants
)
VALUES
(
'2015-07-10',
100388,
(
SELECT min(price)
FROM prices
WHERE product_id = 100388
AND active = 1 ),
(
SELECT max(price)
FROM prices
WHERE product_id = 100388
AND active = 1 ),
(
SELECT avg(price)
FROM prices
WHERE product_id = 100388
AND active = 1 ),
(
SELECT count(price)
FROM prices
WHERE product_id = 100388
AND active = 1 )
)
price\u max
、price\u min
和price\u avg
不能为空,但并非所有产品都有价格,因此这些产品的子查询自然返回空值。如果使用INSERT IGNORE
,则会执行查询,但不会跳过INSERT,而是将0值插入所有这些字段。不管怎样,我都可以修改它,这样它就可以跳过所有的插入,如果任何字段都为空
product\u history
表中已经设置了字段,因此它们不能为NULL。使用IFNULL()
试试这个
INSERT INTO price_hist
(
date,
product_id,
price_min,
price_max,
price_avg,
merchants
)
VALUES
(
'2015-07-10',
100388,
(
IFNULL(SELECT min(price)
FROM prices
WHERE product_id = 100388
AND active = 1 ), 0),
(
IFNULL(SELECT max(price)
FROM prices
WHERE product_id = 100388
AND active = 1 ), 0),
(
IFNULL(SELECT avg(price)
FROM prices
WHERE product_id = 100388
AND active = 1 ), 0),
(
IFNULL(SELECT count(price)
FROM prices
WHERE product_id = 100388
AND active = 1 ), 0)
)
只需使用INSERT。。。改为选择
:
INSERT INTO price_hist
(
date,
product_id,
price_min,
price_max,
price_avg,
merchants
)
SELECT
'2015-07-10',
100388,
min(price),
max(price),
avg(price),
count(price)
FROM prices
WHERE product_id = 100388
AND active = 1
HAVING count(price)
您是否在子选择查询之前尝试过ifnull()?如果我理解正确,这将返回0?然后将继续并将其插入历史记录表?是的,因为您说过product_history表已经设置了字段,所以它们不能为NULL
这将在价格历史记录中插入0,如果任何值为NULL,我想跳过插入!正是我要找的!谢谢
INSERT INTO price_hist
(
date,
product_id,
price_min,
price_max,
price_avg,
merchants
)
SELECT
'2015-07-10',
100388,
min(price),
max(price),
avg(price),
count(price)
FROM prices
WHERE product_id = 100388
AND active = 1
HAVING count(price)