2016-07-08 3 views
0

에서 열을 가져 오기 :몇 가지 질문 SQL 아래 관련을 가지고 내부 쿼리

SELECT mattyp.ID As mattypId, mattyp.Name As mattypName 
FROM T_MaterialType as mattyp 
WHERE mattyp.ID IN          
     (SELECT mather_mattyp.FK_Material_Type_ID 
     FROM T_Material_T_Hersteller_T_MaterialType As mather_mattyp 
     WHERE mather_mattyp.FK_Material_Hersteller_ID IN 
      (SELECT mat_her.ID 
       FROM T_Material_T_Hersteller As mat_her 
       INNER JOIN T_Material As mat ON mat_her.FK_Material_ID = mat.ID 
       INNER JOIN T_Hersteller As her ON mat_her.FK_Hersteller_ID = her.ID 
       WHERE mat_her.FK_Hersteller_ID = 29 
       AND mat_her.ID IN 
        (SELECT FK_MaterialHersteller_ID 
        FROM T_MaterialHersteller_KatSub_SubSubKat 
        WHERE FK_KatSubKat_ID = 249)))--AND (FK_Subsubkat_ID = 91 OR FK_Subsubkat_ID IS NULL)))) 

당신이 위에보다시피 나는 그 열을 :

mattyp.ID As mattypId, mattyp.Name As mattypName 

그러나 전체 SQL 내에서, 나는 또한 싶습니다

:

Name field from table mat (T_Material) and Name field from her (T_Hersteller). 

어떻게 구현할 수 있습니까? 현재 내가 상단에 다음과 같이 수행 할 때

SELECT mattyp.ID As mattypId, mattyp.Name As mattypName, mat.Name, her.Name 

나는이 오류 MSG를 얻을 :

메시지 4104, 수준 16, 상태 1, 줄 47
다중 부분 식별자 "매트. 이름 "을 묶을 수 없습니다.

메시지 4104, 수준 16, 상태 1, 줄 47
"her.Name"부분 식별자를 바인딩 할 수 없습니다.

나는 이런 식으로했다하지만 난 사람이 확인할 수 있습니다?

SELECT mattyp.ID As mattypId, mattyp.Name As mattypName, mat.Name, her.Name 
FROM T_MaterialType as mattyp 
INNER JOIN T_Material_T_Hersteller_T_MaterialType As mather_mattyp ON mattyp.ID = mather_mattyp.FK_Material_Type_ID 
INNER JOIN T_Material_T_Hersteller As mat_her ON mather_mattyp.FK_Material_Hersteller_ID = mat_her.ID 
INNER JOIN T_Material As mat ON mat_her.FK_Material_ID = mat.ID 
INNER JOIN T_Hersteller As her ON mat_her.FK_Hersteller_ID = her.ID 
WHERE mat_her.FK_Hersteller_ID = 29 
    AND mat_her.ID IN 
     (SELECT FK_MaterialHersteller_ID 
     FROM T_MaterialHersteller_KatSub_SubSubKat 
     WHERE FK_KatSubKat_ID = 249)--AND (FK_Subsubkat_ID = 91 OR FK_Subsubkat_ID IS NULL)))) 
+0

많은 내부 쿼리를 중첩해야합니까? 일반적인 '내부 조인 (inner joins)'으로 처리 할 수 ​​없습니까? 나는 그것을 단순화시킬 수 있다고 생각한다. –

답변

0

이보십시오,이 IN 조건 원래 쿼리와 같은 결과를 줄 것이다,이 잘못이 아닌 경우 확실하지 않다 .

SELECT DISTINCT 
    mattyp.ID As mattypId, 
    mattyp.Name As mattypName, 
    mat.Name, 
    her.Name 
FROM T_MaterialType as mattyp 
INNER JOIN T_Material_T_Hersteller_T_MaterialType As mather_mattyp ON mather_mattyp.FK_Material_Type_ID = mattyp.ID 
INNER JOIN T_Material_T_Hersteller As mat_her ON mather_mattyp.FK_Material_Hersteller_ID = mat_her.ID 
    AND mat_her.FK_Hersteller_ID = 29 
INNER JOIN T_Material As mat ON mat_her.FK_Material_ID = mat.ID 
INNER JOIN T_Hersteller As her ON mat_her.FK_Hersteller_ID = her.ID 
INNER JOIN T_MaterialHersteller_KatSub_SubSubKat mat_katsub ON mat_katsub.FK_MaterialHersteller_ID = mat_her.ID 
    AND mat_katsub.FK_KatSubKat_ID = 249 
+0

내 쿼리를 볼 수도 있니? –

+0

내부 조인을 사용하는 쿼리는 OK입니다. 조인 된 테이블의 데이터가 일대일 관계에있는 경우 DISTINCT를 사용하여 중복을 제거해야 할 수도 있습니다. 또한 성능 관점을 위의 쿼리에 배치 할 때 조인을 사용하여 마지막 IN 조건을 피할 수 있습니다. –

+0

더 많은 결과가 나올 수 있으므로 별개의 문제가 될 수 없습니다. –