我有两个名为Person
的表,其中包含ID
和Name
列,第二个名为Relation
,其中包含两列,每列包含一列ID
的{{1}}。这是关于客户和维修人员之间的关系。我想加入这两个表格,以便我在每个关系中都有人名。是否可以通过某种加入来编写此查询?
EDIT ::
我必须做错事,但这不行。我尝试过很多形式的查询,但我只得到一个列或一些错误。这实际上是学校的任务,我已经完成了(使用不同的JOIN查询)。首先我一直试图这样做,但我失败了:这似乎是很常见的情况,所以我不知道为什么它对我来说太复杂了..
以下是我的表格:
Person
它是捷克语,但“......”后括号中的单词是英语等价物。 PS:我正在使用Oracle SQL。
答案 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_id
和p2.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非常重要,所以我会以此为契机。