如果条件为true,则插入mysql

时间:2013-01-25 18:55:00

标签: mysql join multiple-tables

首先,这是问题的简明摘要:

是否可以有条件地运行INSERT语句?类似于此的东西:

IF(expression) INSERT...

现在,我知道我可以使用存储过程执行此操作。

现在,我想这样做

假设我们有以下3个表:

products: id, qty_on_hand
orders: id, product_id, qty
roomTable :id,product_id,room_number,booked_status

现在,假设订购了20个房间(产品ID 2)。我们首先从订单表中检查给定product_id的总数量为total_qty和total_qty< qty_on_hand如果它返回true,则插入订单值并在roomTable的最后booking_status ='Y'房间之后更新1个房间,并带有booked_status ='Y'并给出该房间的id。

问题是我无法进行连接查询。到目前为止我做了什么 -

    INSERT INTO orders(product_id, qty)
SELECT 2, 20 FROM products WHERE id = 2 AND qty_on_hand >= 20

2 个答案:

答案 0 :(得分:1)

对于那些需要更多关于这项技术如何从Mt. SCHNEIDERS,

INSERT INTO orders(product_id, qty)
SELECT 2, 20 
  FROM products 
 WHERE id = 2 AND qty_on_hand >= 20 + (select sum(qty) from orders where product_id = 2)

这里发生的是select语句的结果是硬编码的。在这种情况下,我们采用INSERT INTO命令(product_id,qty)VALUES(2,20)并用SELECT 2,20替换VALUES(2,20).SELECT的结果是硬编码的,但只有条件才返回值满足了。

我发现这篇文章更深入地解释了这种技术:

http://boulderapps.co/dont-insert-when-maximum-is-reached

答案 1 :(得分:0)

这不是这样的吗?

INSERT INTO orders(product_id, qty)
SELECT 2, 20 
  FROM products 
 WHERE id = 2 AND qty_on_hand >= 20 + (select sum(qty) from orders where product_id = 2)

因此,如果最后订单数量加上正在插入的订单的数量少于或等于手中的数量,则不会插入。