检查数字行是否等于 10 且值相同

问题描述 投票:0回答:2

我想检查行数是否等于 10 且值相同。 我这样插入值

INSERT test (value) SELECT 'AAA' AS value FROM seq_1_to_10;

我想检查sql中的值的数量是否等于10行,但我想在mariadb中


DO \$\$ DECLARE cp int; BEGIN SELECT count(*) INTO cpt FROM test WHERE value = 'AAA'; IF cpt != 10 THEN RAISE 'cpt'; END IF; END \$\$;

我正在寻找 mariadb 中的等效查询

我遇到了这个错误:

您的 SQL 语法有错误;检查手册 对应于您的 MariaDB 服务器版本,以便使用正确的语法 靠近 '$$ DECLARE cp int; BEGIN SELECT count(*) INTO cpt FROM 测试 WHERE value = '...' 在第 1 行

sql mariadb
2个回答
0
投票

除非您禁用了序列存储引擎,否则您的插入将按原样工作。

您也可以使用递归 cte:

insert test (value)
  with recursive c as (select 1 value union select value+1 from c where value < 10)
  select 'AAA' from c

如果你想先检查现有行数,你确实需要一个复合语句,但你的语法不正确;这是一个示例,请调整以适应:

BEGIN NOT ATOMIC
  DECLARE c int default 10;
  SET c = c - (select count(*) from test);
  WHILE c > 0 DO
    INSERT test (value) VALUES ('AAA');
    SET c = c - 1;
  END WHILE;
END

小提琴


0
投票

您想如何进行测试? 在应用程序中? 在存储过程中?

您想要 10 个吗? 10个或更多?

在存储过程中:

SELECT COUNT(*) INTO @ct FROM test WHERE val = 'AAA';
IF (@ct = 10) THEN
    ...
ENDIF

在应用程序中:

...("SELECT COUNT(*) FROM test WHERE val = 'AAA');  # perform the query
... get the one row of output into $ct
if ($ct == 10) ...
© www.soinside.com 2019 - 2024. All rights reserved.