我正在寻找一些带有IF-THEN-ELSE结构的SQL查询的帮助。 在“dump”-table中插入一个新行(取决于一列的值)后,它围绕我的应用程序中的自动化 - 复制到一个特殊的表。
为了练习它,我用表prob和表prob2
创建了一个测试DB触发机制受到控制。 现在仍然是如何处理这个特殊规则。这取决于“c”
的值用语言来说这就是我想要的:
IF ( the value in column c of the prob-table - from the row with the highest ID of the prob table = 2 )
THEN (Now, copy this line to the prob2 table)
END IF
这样我可以为“c”的每个值在IF-THEN - ELSEIF - THEN - ELSEIF - THEN - END IF构造中执行不同的动作。
表概率:
- id | a | b | c |
- ----+---------------+---+---+
- 1 |std745_900w | 5 | 4 |
- ----+---------------+---+---+
- 2 |std745_900w | 2 | 3 |
- ----+---------------+---+---+
- 3 |std745_900w | 1 | 9 |
- ----+---------------+---+---+
- 4 |std745_900w | 3 | 2 |
- ----+---------------+---+---+
我的转换为(不工作)SQL查询
IF
(SELECT c FROM prob WHERE id = (SELECT MAX(id) FROM prob ) = 2 )
THEN
(INSERT INTO prob2 ( id, a, b, c )
SELECT id, a, b, c FROM prob WHERE id = (SELECT MAX(id) FROM prob) )
END IF
括号之间的IF之后的查询) - > SELECT c FROM prob WHERE id = (SELECT MAX(id) FROM prob)
< - 工作正常,结果为“2”
在THEN之后的查询 - > INSERT INTO prob2 ( id, a, b, c ) SELECT id, a, b, c FROM prob WHERE id = (SELECT MAX(id) FROM prob)
< - 运作良好
但是,SQL不理解“IF语句”的表达。
这是MariaDB上的mysql
有人可以帮忙吗?
答案 0 :(得分:0)
你可以使用
CASE WHEN (your_test) THEN (do_something_here) ELSE
你可以使用很多'当......然后'
答案 1 :(得分:0)
缺少一些细节,但您可以使用MySQL过程语言执行此操作并从触发器中调用它:
CREATE PROCEDURE COPY_ROW ()
BEGIN
DECLARE pId INT DEFAULT 0;
DECLARE pC INT DEFAULT 0;
SELECT id, c
INTO pId, pC
FROM prob
WHERE id = (SELECT MAX(id) FROM prob );
IF(pC = 2) THEN
INSERT INTO prob2 ( id, a, b, c )
SELECT id, a, b, c FROM prob WHERE id = pId;
END IF;
END;
答案 2 :(得分:0)
SELECT @c := c FROM prob ORDER BY id DESC LIMIT 1;
IF @c = 2 THEN
INSERT INTO prob2 (id, a, b, c)
SELECT id, a, b, c FROM prob ORDER BY id DESC LIMIT 1;
END IF
你的括号出了问题。获取MAX(id)
的子查询通常可以通过ORDER BY
更好地完成。
答案 3 :(得分:0)
感谢大家的注意和提示。使用过程就是这个问题的答案。 谢谢大家!