试图在标题中尽可能具体。我有一个具有外键restaurants
的表category_id
。我想在类别表中输入数据
CREATE TABLE categories(
id PRIMARY KEY,
main_label,
sub_category,
);
但仅当该数据尚不存在时-我正在使用的
INSERT INTO categories(main_label, sub_category)
SELECT * FROM (SELECT 'yum food', 'alt') AS tmp
WHERE NOT EXISTS (
SELECT main_label, sub_category FROM categories WHERE mainLabel = 'yum food' && sub_category = 'alt'
) LIMIT 1;
这正在起作用。
[如果数据已经存在,我(例如'yum food'和'alt')我想选择其ID,以便将其输入到restaurants
表中。
我当前尝试进行TRANSACTION的过程很糟糕,我到处都遇到问题(当您继续阅读时,这将非常明显)
START TRANSACTION;
SET var = SELECT COUNT(*) FROM categories WHERE main_label = 'yum food' && sub_category = 'alt';
IF var > 0 THEN
INSERT INTO categories(main_label, sub_category)
VALUES('yum food', 'alt');
ELSE
SELECT id FROM categories WHERE main_label = 'yum food' && sub_category = 'alt';
END IF;
COMMIT;
看起来我已经找到了答案–至少它正在做我需要的事情。它会检查条目是否存在以及是否存在-存储该ID。然后,如果该条目不存在,则将其插入。
DELIMITER $$
CREATE PROCEDURE test(
name VARCHAR(150),
sub VARCHAR(150)
)
BEGIN
DECLARE cat_id INT DEFAULT 0;
START TRANSACTION;
SELECT COUNT(*)
INTO @ct
FROM categories WHERE mainLabel = name && sub_category = sub;
SET cat_id = @ct;
IF cat_id =0 THEN
INSERT INTO categories(mainLabel, sub_category)
VALUES (name, sub);
COMMIT;
ELSE
SELECT id
INTO @var
FROM categories WHERE mainLabel = name && sub_category = sub;
END IF;
END $$
DELIMITER ;