1

我写了一个查询,当它找不到记录时会抛出错误:

错误

列“product_id”不能为空

MySQL

INSERT INTO orders (date, product_id, quantity)
VALUES ('11/29/2012', (
    SELECT product_id FROM products WHERE product_name = 'Oranges'
), 12)
;

我实际上是在我的 PHP 中进行迭代,并且某些product_name记录将不存在。

我可以说如果子查询什么都不返回,优雅地停止/中止以便 PHP 可以继续迭代吗?

4

2 回答 2

2

试试这个:

INSERT INTO orders (date, product_id, quantity)
SELECT '11/29/2012', product_id, 12
FROM products
WHERE product_name = 'Oranges'

如果没有匹配的产品,查询将成功但不返回任何修改的行。如果您希望在执行查询时可以读取从 PHP 修改的行数。

请注意,如果有多个产品,product_name = 'Oranges'您将在表中插入多行。

于 2012-04-19T20:43:19.057 回答
1

如果你想插入一条记录,你可以尝试回退到例如0如果不存在这样的产品:

INSERT INTO orders (date, product_id, quantity)
VALUES ('11/29/2012', COALESCE((
    SELECT product_id FROM products WHERE product_name = 'Oranges'
), 0), 12);
于 2012-04-19T20:46:07.123 回答