如果它的一个特定列值仍然不可用,我想插入一行。如果可用,我想更新该行。否则它将正常插入。该任务的SQL查询应该是什么?
例如: id,Product_id,user_id,数量是表格的属性
考虑, [1,450,56,2]在表中。
如果我要插入[2,450,56,3],则不会创建新行。它将更新上一行。就像[1,450,56,5]。
答案 0 :(得分:0)
您可以将product_id和user_id设置为表上的主键或唯一键,然后使用INSERT .. ON DUPLICATE KEY UPDATE。您可以找到有关here的更多信息。
它看起来像:
INSERT INTO t1 (id, product_id, user_id, quantity) VALUES (2,450,56,3)
ON DUPLICATE KEY UPDATE quantity = quantity + 3;
或者,您将不得不编写自己的 merge 语句(MySql不支持merge,但是您可以伪造)
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_updateValue`(IN prm_productid INT, IN prm_userid INT, IN prm_quantity INT)
BEGIN
-- Check that the case actually exists first.
DECLARE vExists INT;
SELECT COUNT(1) INTO vExists FROM YourTable WHERE product_id = prm_orderid AND user_id = prm_userid;
IF vCaseExists = 1 THEN
UPDATE YourTable SET quantity = prm_quantity WHERE product_id = prm_orderid AND user_id = prm_userid;
ELSE
INSERT INTO YourTable (id, product_id, user_id, quantity) VALUES (2,450,56,3);
END IF;
END$$
DELIMITER ;
答案 1 :(得分:0)
首先,我将对product_id
和user_id
的组合创建一个唯一的约束(如果您还没有一个,甚至是主键):
ALTER TABLE mytable
ADD CONSTRAINT uc_product_user UNIQUE (product_id, user_id);
然后您可以在on duplicate
语句中使用insert
子句:
INSERT INTO mytable
VALUES (2, 450, 56, 3)
ON DUPLICATE KEY UPDATE quantity = quantity + VALUES(quantity);