SQL Join 2表

时间:2010-11-30 11:25:39

标签: sql join

我有两个名为Person的表,其中包含IDName列,第二个名为Relation,其中包含两列,每列包含一列ID的{​​{1}}。这是关于客户和维修人员之间的关系。我想加入这两个表格,以便我在每个关系中都有人名。是否可以通过某种加入来编写此查询?

EDIT ::

我必须做错事,但这不行。我尝试过很多形式的查询,但我只得到一个列或一些错误。这实际上是学校的任务,我已经完成了(使用不同的JOIN查询)。首先我一直试图这样做,但我失败了:这似乎是很常见的情况,所以我不知道为什么它对我来说太复杂了..

以下是我的表格:

Person

它是捷克语,但“......”后括号中的单词是英语等价物。 PS:我正在使用Oracle SQL。

4 个答案:

答案 0 :(得分:1)

假设你的表是:

persons:   (id, name)
relations: (customer_id, serviceman_id)

使用标准SQL:

SELECT p1.name AS customer_name, 
       p2.name AS serviceman_name
FROM persons p1 
     JOIN relations ON p1.id=relations.customer_id
     JOIN persons p2 ON relations.serviceman_d=p2.id;

进一步说明

联接创建下表:

p1.id|p1.name|relations.customer_id|relations.serviceman_id|p2.id|p2.name

p1.id=relations.customer_idp2.id=relations.serviceman_id的位置。 SELECT子句仅选择JOIN中的名称。

请注意,如果relations中的所有ID都在persons中,则结果大小将与relations表的大小完全相同。您可能需要添加foreign key来验证。

答案 1 :(得分:1)

SELECT *
FROM Relation
INNER JOIN Person P1
ON P1.ID = Relation.FirstPersonID
INNER JOIN Person P2
ON P2.ID = Relation.SecondPersonID

答案 2 :(得分:0)

SELECT p1.name AS customer, p2.name AS serciveman
FROM person p1, person p2, relation
WHERE p1.id=relation.customerid AND p2.id=relation.servicemanid

答案 3 :(得分:0)

人(身份证,姓名) 关系(ID)

您没有提及关系包含的其他列,但这正是您所需要的:

Select name
from Person as p
join Relation as r
on p.ID = r.ID

这是INNER JOIN和大多数其他答案一样。请不要使用此功能,直到您了解如果任一记录在另一个表中没有关系,它将从数据集中丢失(即您可能丢失数据)

理解different types of join非常重要,所以我会以此为契机。