2014-05-15 63 views
0

假設我們有如下表:查詢來選擇:誰兩名職工工作在同一家公司

company    company_has_employee  employee 
------------------------------------------------------------- 
id     company_id     id 
companzy_name  employee_id     emplyee_name 

如何創建SQL查詢,以檢索任何兩個員工,誰在同一家公司,什麼是作品這家公司?

+0

就這麼清楚,你想要一個擁有2名員工的公司嗎? – Lamak

+0

我在這裏失去..兩名員工?那意味着公司只有兩名員工或任何兩名員工? – AJP

回答

1

假設於爾根·D的連接表是正確的,我將修改查詢

select top 2 company_name, e.employee_name 
    from compyny c 
    join company_has_employee ce on ce.company_id = c.id 
    join employee e on e.id = cs.employee_id 
    group by company_name 
    having count(e.id) > 1 

這將始終返回頂部2員工

克林斯曼D的原始查詢總是會返回首先和最後一名員工根據他們的ID。

如果你想兩個僱員隨機選擇的,那麼你可以試試這個:

select top 2 company_name, e.employee_name 
    from compyny c 
    join company_has_employee ce on ce.company_id = c.id 
    join employee e on e.id = cs.employee_id 
    group by company_name 
    having count(e.id) > 1 
    order by RAND((e.ID)*DATEPART(millisecond, GETDATE())) 

最後一個ORDER BY子句將隨機變化的記錄的順序,你總是會得到一個隨機順序的頂部2。這意味着每次運行查詢時都會選擇2名隨機員工。

1
select company_name, 
     min(e.employee_name) as emp1, 
     max(e.employee_name) as emp2 
from compyny c 
join company_has_employee ce on ce.company_id = c.id 
join employee e on e.id = cs.employee_id 
group by company_name 
having count(e.id) > 1 
+1

請問,請解釋一下,在這種情況下,集合函數(最小值,最大值)是如何工作的? –

+1

你說你需要2名員工,每個公司至少有2名員工。如果你由公司分組,那麼你可以使用min()和max()來爲每個公司獲得2名員工。數據庫將按字母順序使用最小名稱,按字母順序使用最大名稱。 –

+0

你想讓你的SQL隨機選擇任何兩名員工嗎?即每次運行查詢時,結果可能不同。那是對的嗎? – Swagata