尝试使用触发器 a) 用top_category
在 中找到的冒号左侧的值填充新列category
,然后 b) 如果没有冒号,则将整个插入值放入 中top_category
。我无法构建第二个触发器来创建。
CREATE TABLE qn_txs (
id SERIAL PRIMARY KEY,
category VARCHAR(250),
top_category VARCHAR(250)
);
-- Stage 1 trigger works
-- CREATE TRIGGER `t_add_top_category1` BEFORE INSERT ON `qn_txs`
-- FOR EACH ROW
-- SET NEW.`top_category` = LEFT(NEW.category, INSTR(NEW.category, ":") - 1);
DELIMITER //
CREATE TRIGGER `t_add_top_category2` BEFORE INSERT ON `qn_txs`
FOR EACH ROW BEGIN
SET NEW.`top_category` = LEFT(NEW.category, INSTR(NEW.category, ":") - 1)
-- make sure top_category is not null if there is a value in category
IF (NEW.`top_category` = '')
THEN
SET NEW.`top_category` = NEW.`category`;
END IF;
END//
DELIMITER;
INSERT INTO qn_txs (category)
VALUES ('I should also be a top cat'), ('bananas:green'), ('baseball:table'), (''), ('Very long string: with spaces');
SELECT * FROM qn_txs;
这是插入完成后所需输出的表格。
ID | 类别 | 顶级类别 |
---|---|---|
1 | 我也应该是顶级猫 | 我也应该是顶级猫 |
2 | 香蕉:绿色 | 香蕉 |
3 | 棒球:桌子 | 棒球 |
4 | ||
5 | 非常长的字符串:带空格 | 很长的字符串 |
https://dbfiddle.uk/_ru7qse3