2014-02-20 42 views
2

我有一个表测试器,它有一个主ID和一个外键,它引用了一个名为test的表的ID。Mysql计数,加入和双重连接

测试表有一个numAllowed列,表示有多少人可以参加此特定测试。

我想插入一个新的测试人员,其测试列只有在测试人员少于测试人员的情况下才引用相同的测试,而测试人员的测试人数不会超过该测试的数值。例如,测试人员“亚历克斯”只有在少于20人(已允许数量)已经服用/已服用的情况下才能进行“地理”测试。

此外,计数函数如何在像这样的查询中操作?它是只计算包含在连接中的列还是它在查询外的“范围”?它会返回该表中所有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

你在“双”表中有什么? – fthiella

+0

什么都没有,只要我知道,这是为了选择你自己的价值观。 –

+0

不知道mySQL是否支持dual,但我确定你不能在WHERE子句中使用像count()这样的聚合函数。您需要对数据进行分组并使用HAVING子句。 – scraatz

回答

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