2017-03-09 56 views
1

您目前正在保持接触关系管理系统的一个组织,他们跟踪组织和员工属于这些组织。要求您清理他们的数据,并确定没有任何员工的所有组织。如何显示空{}所有的公司没有员工

你有两个表,组织和员工。从组织到员工之间存在一对多的关系。 IE浏览器。组织可以有许多员工,员工属于一个组织。

组织:ID整数名字符串

员工:ID整数名字符串的organization_ID整数

作业:写一个SQL查询,将产生不附加有任何员工的公司名单。

我曾尝试:

Select Organisation,Organisation.ID, Organisation.Name 
From Organisation 
Left Join Employees On organisationID = Employees Employees.ID 
order by Organisation,Organisation.name 
+0

您好,我知道如何加入两个表,但我不确定如何使显示器只是没了员工的企业连接以外的所有显示所有与空字段包含 –

+0

我曾尝试选择组织,Organisation.ID,Organisation.Name>来自组织>左加入>员工>在organisationID = Employees Employees.ID>按组织,Organisation.name排序?任何帮助表示感谢 –

回答

1

这大概作业问题的关键是你用加盟,这是在一个表中相关数据到另一个数据的主要机制之一来获得。

一般SQL有内部和外部连接,不同之处在于内部联接需要在每个表中的记录进行查询,以产生一个结果记录存在。外部联接只需要一个表有一个外部记录。

左连接(左外连接)要求表的关键字的左连接有记录,而右连接(右外连接)要求表的关键字的右连接具有记录。完整的外连接允许向左或向右记录。

如果联接的一端没有记录,那么结果记录的列值将为空,因此如果表中有非空(如主键)列,则可以始终告诉是否有通过过滤掉任何非空值的记录。

例如(假设你的ID列被定义为“非空”,它通常是有效的,如果它是无效的它的设计有问题):

select 
    * 
    from Organizations 
    left join Employees on 
     Organizations.id = Employees.organization_id 
    where Employees.organization_id is null 
; 
+0

感谢您的帮助。 –

+0

不客气...如果你喜欢它,请upvote和标记为答案! –

1

它适合加入查询哪里organization_id将存在于组织表中,但在Employee表中不存在(换句话说,为空)。

查询:编写一个SQL查询,该查询将生成未附加任何员工的公司列表。

SELECT O.id, O.Name 
FROM Organization AS O 
LEFT JOIN Employees AS E 
    ON O.id=E.organization_id 
WHERE E.organization_id IS NULL 
+0

谢谢,这是我不确定的地方。 –

0

组织:ID整数名字符串

员工:ID整数名字符串的organization_ID整数

您可以使用以下查询来获取组织没有雇员。

SELECT Org.id,Org.name from Organizations Org 
LEFT OUTER JOIN 
Employees Emp on Org.id=Emp.orgnization_id where Emp.id is null;