提问者:小点点

MYSQL从多个键中计数选定结果,如果没有则插入


我正在尝试插入一个基于选择搜索结果的新行。 下面是当前的查询。

DECLARE @count INT;
SET @count = ( SELECT COUNT(*) FROM tagged_products
                WHERE
                  company_id = 1 AND
                  product_id = 141 AND
                  category_id = 3)
IF @count <= 0
THEN
  INSERT INTO tagged_products (company_id, product_id, category_id)
  VALUES (1, 141, 3)
END IF

我得到的当前错误是:您的SQL语法中有一个错误; 检查与您的MySQL server版本相对应的手册,以确定在“if@count<=0 THEN INSERT INTO tagged_products(company_'at line 6”附近使用的正确语法

如果没有匹配的select查询,查询如何插入行,否则它应该忽略它?

谢谢:)


共1个答案

匿名用户

如果行还不存在,则要插入行。 最简单的方法是在3个表列上有一个unique约束(或索引),然后使用insert.。。on duplicate key:

INSERT INTO tagged_products (company_id, product_id, category_id)
VALUES (1, 141, 3)
ON DUPLICATE KEY UPDATE company_id = VALUES(company_id) -- no-op

如果无法创建唯一键,则可以使用insert.。。select.。。where not exists.。。:

INSERT INTO tagged_products (company_id, product_id, category_id)
SELECT 1, 141, 3
WHERE NOT EXISTS (SELECT 1 FROM tagged_products WHERE company_id = 1 AND product_id = 141 AND category_id = 3)