我有一个表测试器,它有一个主id和一个引用名为test的表的id的外键。
测试表有一列numAllowed,表示可以参加此特定测试的人数。
我想插入一个新的测试人员,如果测试人员引用相同的测试而不是针对该特定测试的numAllowed,则测试列仅引用测试。例如,“Alex”,一名测试员,只有少于20人(numAllowed)正在服用/已经服用它,才能接受“Geography”测试。
此外,count函数如何在这样的查询中运行?它是仅计算连接中包含的列还是查询外的“范围”?它会返回该表中所有ID的计数吗?
insert into tester (test, createddate, ipaddress)
select
11, NOW(), xxx.xxx.xxx.xxx
from
dual
where exists
( select * from
test ts inner join
tester tr
on tr.test = ts.id
where ts.numAllowed - count(tr.id) > 0
and ts.id = '11')
答案 0 :(得分:1)
我会写这样的查询:
INSERT INTO tester (test, createddate, ipaddress)
SELECT
test.ID, NOW(), 'xxx.xxx.xxx.xxx'
FROM
test
WHERE
test.ID = 1
AND EXISTS (SELECT COUNT(*)
FROM tester
WHERE tester.test = test.ID
HAVING test.numAllowed-COUNT(*)>0);
请参阅小提琴here。