1

レコードが見つからないときにエラーをスローするクエリを作成しました。

エラー

列'product_id'をnullにすることはできません

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 に答える