2016-11-11 78 views
-1

我需要獲得與同一家旅館一起旅行的所有員工姓名。 我試圖用組功能來獲得它,但它只顯示第一個,它也會顯示所有其他員工。我試圖用where語句對其進行排序(其中count(*)== 2),但它不能與count()我想。顯示具有相同日期的列SQL

select *, count(*) as Travelers from employees E 
    join travel t 
    on E.PNR = E.employees_Nr 
    join hotel H 
    on H.HNR = R.Hotel_HNR 
    group by beginndate; 

希望你能幫助我:) 謝謝!

+3

請顯示一些示例數據和所需的結果。也標記正在使用的dbms。 –

+0

Im在mysqlWorkbench上使用Maria DB 數據類似於 插入mitarbeiter 值(2193,'George',10,2700); insert into mitarbeiter values(2194,'Schlicht',30,6000); 插入酒店 值(6,'Zum Stern','Business',37216,'Witzenhausen'); 插入reise值(2194,6,「2015-01-12」,「2015-03-12」,2131); 插入reise值(2193,6,「2015-01-12」,「2015-01-13」,500); – Shaegi

+0

什麼決定「一起旅行」?我不會相信'last_name'。 –

回答

0

您的示例中的命名不是特別一致,所以我只是模仿表/列名來表達想法;自然,查詢將需要在真實環境中進行編輯。

此外,可能您不希望從所有表中選擇所有列,但這就是您在嘗試查詢時所做的操作,所以我按原樣離開它。

select *, count(*) as Travelers 
from employees E1, employees E2, travel T1, travel T2, hotel H 
where E1.PNR = T1.employees_Nr 
    and E2.PNR = T2.employees_Nr 
    and E1.PNR != E2.PNR 
    and T1.begindate = T2.begindate 
    and T1.hotel_HNR = T2.hotel_HNR 
    and T1.hotel_HNR = H.HNR; 

查詢可能不是從性能的角度來看有史以來最好的,但我不認爲你有百萬名員工和數十億的旅行,所以它應該做沒事。儘管如此,確保你有很好的索引 - 當然,主鍵,但也可以索引employees_Nrhotel_HNRbegindate可能會有所幫助。

相關問題