Id仅在最后一行的值正确时才喜欢运行查询。在我的例子中,如果ColumnA的值在最后一行为1,则我想运行MyQuery。但是,如果该值不为1,则在此停下来,不执行任何操作。
我尝试使用case和count(*)以及If是否存在。但我不断出错
SELECT CASE WHEN ((SELECT COUNT(*) FROM
(Select a.* from table as a order by a.index desc limit 1) as b
where b.ColumnA = 1)) > 0 )
THEN (MyQuery)
END
我也尝试过是否存在
if exists Select b.* from (Select a.* from table as a order by a.index desc limit 1) where b.ColumnA = 1
begin
(MyQuery)
end
您能指出这些查询有什么问题吗,或者也许有一种更好的方法可以实现这一目标。
编辑。该查询将在该表中的每次插入之后在触发器上运行,目的是避免在不需要该行的行上运行MyQuery。 MyQuery有点慢,大多数行都不需要它来运行。
答案 0 :(得分:2)
我认为我们可以在此处重新定义您的逻辑,以使其按需工作:
WITH cte AS (
SELECT ColumnA, ROW_NUMBER() OVER (ORDER BY index DESC) rn
FROM yourTable
)
(your query here)
WHERE (SELECT ColumnA FROM cte WHERE rn = 1) = 1;
上面的WHERE
子句将返回true或false,并将应用于您查询中潜在结果集中的所有记录。也就是说,如果来自“最后一个”记录的ColumnA
值为1,则您将取回整个结果集,否则它将为空集。
假设您的MariaDB版本既不支持ROW_NUMBER
,也不支持CTE,请使用:
(your query here)
WHERE (SELECT ColumnA FROM yourTable ORDER BY index DESC LIMIT 1) = 1;
答案 1 :(得分:1)
这取决于您的查询是什么。
INSERT ...
SELECT ... WHERE ... -- this could lead to zero rows being inserted
DELETE ...
WHERE NOT EXISTS ( SELECT ... ) -- this could lead to zero rows being deleted
UPDATE t1 JOIN t2 ... -- the JOIN may cause no rows to be updated
注意:
(Select a.* from table as a order by a.index desc limit 1) as b
where b.ColumnA = 1)) > 0 )
可以简化(并加快)为
( ( SELECT ColumnA FROM table ORDER BY index DESC LIMIT 1 ) = 1 )
请注意,这是对/错的“表达式”,因此可以在各种地方使用。