我有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:字段(ID,TEAMID,NAME)=>(id = int,teamid = int与表团队相关联,name = varchar)
表团队:fields(ID NAME)=>(id = int,name = varchar)
假设一个团队中的玩家人数最多为20,因此对于相同的teamid值,您期望玩家表格最多关联20条记录,或者至少这是我们人类认为的,因为对于计算机而言,它也可以是无限的。我一直在寻找一种方法,仅在实际上允许插入记录的情况下才允许插入,在这种情况下,条件是在玩家表中每队少于21条记录。
答案 0 :(得分:2)
您可以使用Nonlinear regression model
model: y ~ a * (e * n + k1 * k2 + c)
data: parent.frame()
a e
2.310e-10 5.668e+05
residual sum-of-squares: 1.673e-26
Number of iterations to convergence: 12
Achieved convergence tolerance: 1.49e-08
,并将条件放入INSERT ... SELECT
查询中。
SELECT
INSERT INTO player (teamid, name)
SELECT @teamid, @playername
FROM DUAL
WHERE (SELECT COUNT(*) FROM player
WHERE teamid = @teamid) < 20
是一个虚拟表,需要选择文字数据,但需要在查询中包括其他子句。