2014-02-20 75 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