2012-11-24 114 views
2

我试过这个查询:在少于2个医院工作的医生是什么?但结果并非我所期望的。SQL HAVING COUNT and JOIN

我有这些表:

CREATE TABLE Hospital (
    hid INT PRIMARY KEY, 
    name VARCHAR(127) UNIQUE, 
    country VARCHAR(127), 
    area INT 
); 
CREATE TABLE Doctor (
    ic INT PRIMARY KEY, 
    name VARCHAR(127), 
    date_of_birth INT, 
); 
CREATE TABLE Work (
    hid INT, 
    ic INT, 
    since INT, 
    FOREIGN KEY (hid) REFERENCES Hospital (hid), 
    FOREIGN KEY (ic) REFERENCES Doctor (ic), 
    PRIMARY KEY (hid,ic) 
); 

我试着用这样的:

SELECT DISTINCT D.ic 
    FROM Doctor D, Work W 
    JOIN Hospital H ON (H.hid = W.hid) 
    WHERE D.bi = W.bi 
    GROUP BY (D.ic) 
    HAVING COUNT(H.hid) < 2 
;  

感谢。

回答

5

你需要使用LEFT JOIN与表Hospital加盟是没有必要的

SELECT a.name 
FROM Doctor a 
     LEFT JOIN `Work` b 
      ON a.ic = b.ic 
GROUP BY a.name 
HAVING COUNT(b.ic) < 2 
+0

谢谢,它的工作原理。 – tomss

+0

不客气:D –