Mysql 查询仅在 select count > n 时插入

标签 mysql insert

我有 2 个疑问:

SELECT COUNT(*) FROM a WHERE id = 1
//if row == 1
INSERT INTO a VALUES(fielda) VALUES('value')

有没有办法将这两个查询合并为一个?我尝试使用“IF(count> 0,..)”和类似的方法,但查询不正确。 这涉及到将新记录插入表中,注意不要超过每个字段的预设记录数。 理论上它应该类似于 INSERT IF ...

编辑:

@Barmar我尝试过,但我想我不明白你写的是什么(事实上我在查询中犯了一个错误),我尝试这样回答:

THE QUERY AFTER YOUR RESPONSE:
INSERT INTO table1 SELECT MAX(id) FROM table1 WHERE field1 = (SELECT id from a WHERE f = field2) HAVING COUNT(*) = 1 (all fields request) VALUES (all values request)

//field1 = id from table2
//field2 = id from another table: associative value

//ORIGINAL QUERY
//FIRST COUNT:
SELECT COUNT(*) from table1 WHERE field1 = (SELECT id FROM table2 WHERE f = field2)
//AFTER THE INSERT:
INSERT INTO table1 (all fields request) VALUES (all values request)

我想到了我试图向您展示的这个例子:

TABLE PLAYER: fields(ID, TEAMID, NAME) => (id=int, teamid=int 关联到表 team, name=varchar)

表团队:字段(ID NAME)=>(id=int,name=varchar)

假设一支球队的球员最多为20人,那么对于相同的teamid值,您期望球员表关联的记录最多为20条,或者至少这是我们人类的想法,因为对于计算机来说也可以是无限的。我一直在寻找一种方法,仅在实际上允许插入记录的情况下才允许插入,在这种情况下,条件是在球员表中每支球队的记录少于21条。

最佳答案

您可以使用INSERT ... SELECT,并将条件放入SELECT查询中。

INSERT INTO player (teamid, name)
SELECT @teamid, @playername
FROM DUAL
WHERE (SELECT COUNT(*) FROM player
        WHERE teamid = @teamid) < 20

DUAL 是一个虚拟表,当您需要选择文字数据,但需要在查询中包含其他子句时。

关于Mysql 查询仅在 select count > n 时插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52156911/

相关文章:

mysql - 如果存在则更新否则插入 csv 数据 MySQL

php - 为什么我不应该在 PHP 中使用 mysql_* 函数?

mysql - 使用 lampp 托管时如何修复 "Slim Application Error"错误

java - 想在数据库中第一次插入并出错

php - MySQL update or insert or die 查询

shell - 使用 mysqldump 时脚本抛出意外运算符

选择中的 MySQL 计数

c - 我尝试添加链接列表时遇到问题,但调试器说无法访问临时内存

python - PyQt : How to insert text at the cursor in QTableView

mysql - 如何在 MySQL 数据库中插入一系列行