2015-11-01 68 views
0

因此,我正在做類似於查找所有在超過1個項目上工作的員工的名字和姓氏。我知道要做到這一點最簡單的方法是使用COUNT,像這樣....在MYSQL中查找沒有使用計數的記錄數

SELECT e.Fname, e.Lname 
FROM employee e INNER JOIN works_on w 
ON e.SSN = w.ESSN 
GROUP BY SSN 
HAVING COUNT(*) > 1 

這讓我我需要什麼,但有人我幫助問我這是怎麼在不使用COUNT來完成...我不知道。所以,我想我會在這裏問任何指點或建議,因爲我在這方面很乾。作爲參考,快速查看使用的數據庫如下。任何幫助或指導人可以提供將不勝感激。

enter image description here

+2

*「不止一個」*涉及計數,所以我不會使事情複雜化。也就是說,你可以在'work_on'上連接兩次,確保兩者不同,並查看第二個是否爲空。 – Kenney

回答

1

只是一種不同的方式來編寫類似的查詢到阿明和肯尼的建議。

create table employee(ssn int, fname varchar(50), lname varchar(50)); 
create table works_on (essn int, pno int); 

insert into employee values (1, 'Tom', 'Smith'), (2, 'Matt', 'Smith'), (3, 'Sam', 'Smith'); 
insert into works_on values (1, 1), (2, 1), (2, 2), (3, 1), (3, 2); 

select distinct fname, lname 
from employee e 
inner join works_on w1 on e.ssn = w1.essn 
where exists (
    select 1 from works_on where essn = e.ssn and pno <> w1.pno 
); 

Result: 
| fname | lname | 
|-------|-------| 
| Matt | Smith | 
| Sam | Smith | 

例子:http://sqlfiddle.com/#!9/e2411/5

我喜歡count方法你有,但。

+0

謝謝,這個作品(對我最有意義)。是的,我知道COUNT是做這件事的最好也是最簡單的方法,我只是在討論某個問題時討厭在牆上打牆。感謝大家。 – enigmahfc

1

正如評論上面已經指出的那樣,你可以參加兩次,如果你絕對要避免這樣的COUNT:

SELECT e.Fname, e.Lname 
FROM employee e 
INNER JOIN works_on w 
    ON e.SSN = w.ESSN 
INNER JOIN works_on wd 
    ON wd.PNO != w.PNO 
GROUP BY SSN 

只會讓你那些具有至少2行在work_on中,否則雙連接失敗:)

相關問題