INSERT INTO TABLE
SELECT value_for_column1, value_for_column2, ...
FROM wherever
WHERE your_special_condition
Wenn keine Zeilen von der Auswahl zurückgegeben werden (weil Ihre spezielle Bedingung falsch ist), findet keine Einfügung statt.
Verwenden Sie Ihr Schema aus der Frage (unter der Annahme Ihrer id
Spalte ist auto_increment
):
insert into orders (product_id, qty)
select 2, 20
where (SELECT qty_on_hand FROM products WHERE id = 2) > 20;
Dadurch werden keine Zeilen eingefügt, wenn nicht genügend Bestand vorhanden ist, andernfalls wird die Auftragszeile erstellt.
Schöne Idee übrigens!