连接3个没有外键关系的SQL表

时间:2019-04-04 17:20:51

标签: sql sql-server

我想将3个SQL表合并为一个。其中有2个是通过外键链接的,但第3个不是。

3种表方案是:

  

PaysSociete

PaysSociete

  

雇员

Employe

  

木质

Ligne

我想将其中的3个加入到名为 User 的唯一表中,该表具有以下列:

  • Pays:PaysSociete.LibellePaysSociete
  • Societe:Employe.SOCIETE
  • Utilisateur:Ligne.UtilisateurLigne
  • Matricule:Employe.Matricule
  • NumLigne:Ligne.Numero
  • EmpMetier:Employe.SectionIris

在表Ligne中,列CodeSociete对应于表id中的PaysSociete列(作为外键)

Societe的列Employe对应于CodePaysSociete中的PaysSociete列(但它不是外键,因为它不是唯一的)

这是我的要求:

select
case
when p.PaysSocieteId=1 then 'CountryCode1'
when p.PaysSocieteId=2 then 'CountryCode2'
when p.PaysSocieteId=3 then 'CountryCode3'
end Pays,

p.CodePaysSociete Societe,
l.UtilisateurLigne Utilisateur,
e.Matricule Matricule,
l.Numero NumLigne,
e.SectionIris EmpMetier

from Ligne as l 
join PaysSociete as p on l.CodeSociete=CONVERT(varchar(10), p.PaysSocieteId)
join Employe as e on e.Societe = p.CodePaysSociete

但是重复的User.MatriculeUser.EmpMetier列给我带来了不好的结果。

我该如何解决?

请帮助!!!

2 个答案:

答案 0 :(得分:1)

您可以在与另一列对应的任何列上联接表。加入不需要外键。

SELECT * 
  FROM Ligne
  JOIN PaysSociete ON Ligne.CodeSociete = CONVERT(varchar(10), PaysSociete.id)
  JOIN Employe ON Employe.Societe = PaysSociete.CodePaysSociete 

答案 1 :(得分:0)

问题解决了!

ReferentielId Ligne列处理了 EmployeId Employe列中的数据。

一个简单的结点起作用。

很抱歉造成麻烦。