【问题标题】:Mysql query insert into only if select count > n只有当 select count > n 时,Mysql 查询才插入
【发布时间】:2020-11-22 06:43:58
【问题描述】:

我有 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 associate to table team, name=varchar)

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

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

【问题讨论】:

  • 什么是fielda?它是表aid = 1 的行中的一列吗?
  • 我认为你需要澄清你真正想要做什么。显示表格原始内容的示例,以及您要插入的内容。
  • INSERT 语句要么使用 VALUES 列出要插入的值,要么使用 SELECT 从查询中获取值。您不能在同一插入中同时使用两者。
  • fielda(在第一个示例中)是第一个表的公共字段。你说得对我写错了:不存在b,只存在a
  • 是一张桌子还是两张桌子?底部的编辑有名为table1table2a 的表。

标签: mysql insert


【解决方案1】:

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

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

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

【讨论】:

  • 试试看例子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多