【问题标题】:Join table complicate连接表复杂
【发布时间】:2012-04-18 09:59:23
【问题描述】:

我有这些表

Person
ID_PRS   Name
------   -----
1        John
2        Brian
3        Mike

Con_PRS_Fonc
    ID_PRS  ID_FONCT  
    -----   -------
     1       17
     1       18
     3       17

   Fonction
       ID_FONCT   LABEL  ID_CATEG  ID_MET ID_ANA
       -------    -----  --------  ------ ------
         17       Boss      1        56     78
         18       Junior    1        45     56

Category
 ID_CATEG  LABEL
 --------  -----
    1      Cleaning
    2      Wahsing

MEtir
 ID_MET   LABEL
 ------   -----
  56       Go
  45       Come

Analys
 ID_ANA  LABEL
 ------  -----
  78     Think
  56     Drink

我怎样才能得到:

ID_PRS  NOM  ID_FONCT   LABEL_FONCT  ID_CATEG  LAB_CAT   ID_MET   LAB_MET   ID_AN   LAB_ANA
------  ---- --------   -----------  --------  -------    ------   -------   -----   -------
   1    John  17         Boss           1      Cleaning   56        GO        56     Think

我知道只有我可以用表 Con_PRS_Fonc 加入表 Person,但我如何加入其他表?

SELECT * FROM PERSON
LEFT JOIN Con_PRS_Fonc ON PERSON.ID_PRS = Con_PRS_Fonc .ID_PRS 

提前谢谢你, 史蒂夫

【问题讨论】:

  • 建议:用有意义的名称重命名您的多个 LABEL 属性,这些名称在整个模型中都是唯一的,例如分别为Category_labelMEtir_labelAnalys_label
  • ...那么您的查询将非常简单:SELECT * FROM person NATURAL JOIN Con_PRS_Fonc NATURAL JOIN FONCTION NATURAL JOIN CATEGORY NATURAL JOIN MEtir NATURAL JOIN Analys;

标签: sql join left-join


【解决方案1】:

这应该会得到你想要的:

    SELECT 
Person.ID_PRS, 
Person.Name, 
Fonction.ID_FONCT, 
Fonction.LABEL AS LABEL_FONCT,
Fonction.ID_CATEG,
Category.LABEL AS LAB_CAT,
MEtir.ID_MET,
MEtirLABEL AS LAB_MET, 
Analys.ID_ANA,
Analys.LABEL AS LAB_ANS
FROM PERSON
INNER JOIN Con_Prs_Fonc ON Person.ID_PRS = Con_Prs_Fonc.ID_PRS
INNER JOIN Fonction ON Fonction.ID_FONCT = Con_Prs_Fonc.ID_FONCT
INNER JOIN Category ON Category.ID_CATEG = Fonction.ID_CATEG
INNER JOIN MEtir ON MEtir.ID_MET = Fonction.ID_MET
INNER JOIN Analys ON Analys.ID_ANA = Fonction.ID_ANA

【讨论】:

    【解决方案2】:

    类似这样的:

    SELECT * FROM person as P
    INNER JOIN Con_PRS_Fonc AS CPF ON P.ID_PRS = CPF.ID_PRS 
    INNER JOIN FONCTION AS FON ON FON.ID_FONCT = CPF.ID_FONCT
    INNER JOIN CATEGORY AS C ON FON.ID_CATEG = C.ID_CATEG
    INNER JOIN MEtir AS MEt ON Fon.ID_MET = MEt.ID_MET
    INNER JOIN Analys AS ANA ON Fonc.ID_ANA = ANA.ID_ANNA
    

    我无法确认其 100% 正确,但只需加入关系表即可:)

    【讨论】:

      猜你喜欢
      • 2016-04-04
      • 2014-07-23
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多