Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果值为null,则忽略插入_Mysql - Fatal编程技术网

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)