Mysql计数,连接和双重结合

时间:2014-02-20 17:54:00

标签: mysql join count

我有一个表测试器,它有一个主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')

1 个答案:

答案 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