2014-05-15 27 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