INSERT INTO TABLE
SELECT value_for_column1, value_for_column2, ...
FROM wherever
WHERE your_special_condition
Si aucune ligne n'est renvoyée de la sélection (parce que votre condition spéciale est fausse), aucune insertion ne se produit.
En utilisant votre schéma de la question (en supposant que votre id
la colonne est auto_increment
):
insert into orders (product_id, qty)
select 2, 20
where (SELECT qty_on_hand FROM products WHERE id = 2) > 20;
Cela n'insérera aucune ligne s'il n'y a pas assez de stock disponible, sinon cela créera la ligne de commande.
Bonne idée d'ailleurs !