2010-07-28 4 views
0

내가이 SQL 서버 문이 작동하지 않는 경우, 나는 그것을 레코드 반환되지 않는 이유는 확실하지 않다 : 간단히SQL Server는 조인 문은

SELECT 
    contacts.firstname , 
    contacts.lastname , 
    contacts.address1 , 
    contacts.city, 
    contacts.zip, 
    countries.title AS countrytitle, 
    states.title AS statetitle 
FROM providers, payableinvoices, contacts 
LEFT JOIN countries ON countries.countryid=contacts.countryid 
LEFT JOIN states ON states.stateid=contacts.stateid 
WHERE payableinvoices.payableinvoiceid=4 
AND providers.providerid=payableinvoices.providerid 
AND providers.contactid=contacts.contactid" 

을, 나는 다음과 같은 테이블이 있습니다

  • 연락처 테이블 : 해당 열에 contactid, firstname, lastname, address1, city, zip이 포함됩니다.
  • 공급자 테이블 : 해당 열에는 providerid, contactid가 포함됩니다.
  • payableinvoices 테이블 : it s 열에는 payableinvoiceid, providerid가 포함됩니다.

따라서 기본 키와 외래 키를 함께 연결하면 공급자가 할당 된 "payableinvoiceid"에 해당하는 필수 필드를 가져옵니다.

도와주세요. 감사!

+0

'제공자'에 명시적인 참여가 표시되지 않습니다. – Oded

+2

왜이 질문이 커뮤니티 위키로 만들어 졌습니까? – codingbadger

+0

@ 배리 : 원래 질문의 형식이 매우 형편 없었기 때문에 많은 사람들이 앞서서 편집했습니다. 우연의 일치로 5 명의 사람들이 1 분 안에 다른 편집 내용을 모르고 편집했습니다. INNER가 PI.ContactID = P.ContactID ON PayableInvoices의 PI 가입이 은 INNER PayableInvoices PI 가입해야한다 : 디자인, 편집의 X 후, 질문이 이것 때문에 오류를 보여 –

답변

1

우선 사용하도록 표준화되어 전체에 합류했다. 당신이 다시 기대 행을 받고하지 않는 경우

, 당신은 기본 "SELECT ... 공급자에서"예로부터 당신의 방법을 작동해야합니다 기본으로

  • 시작은 "SELECT .. ..FROM 제공 "내부가 payableinvoices에 가입 추가
  • ... 시험
  • 는 WHERE 조건 ... 시험을 추가하는 것이 그 등 등 그래서

행이 어디 있는지 빨리 찾을 수 있습니다 ou 티.

+0

이전 코드가 작동하는 것으로 나타났습니다. 값 "4"의 특정 행에 연관된 "providerid"가 없었습니다. 감사 ! – johnshaddad

1

사용해보십시오 :

SELECT 
    contacts.firstname , 
    contacts.lastname , 
    contacts.address1 , 
    contacts.city, 
    contacts.zip, 
    countries.title AS countrytitle, 
    states.title AS statetitle 
FROM providers 
    INNER JOIN payableinvoices ON providers.providerid=payableinvoices.providerid 
    INNER JOIN contacts ON providers.contactid=contacts.contactid 
    LEFT JOIN countries ON countries.countryid=contacts.countryid 
    LEFT JOIN states ON states.stateid=contacts.stateid 
WHERE payableinvoices.payableinvoiceid=4 

(가) 위의 나에게 잘 보이는 : 내가 할 것

SELECT 
    C.FirstName , 
    C.LastName , 
    C.Address1 , 
    C.City, 
    C.Zip, 
    CO.Title AS CountryTitle, 
    S.Title AS StateTitle 
FROM Contacts C 
INNER JOIN Providers P ON P.ContactID = C.ContactID 
INNER JOIN PayableInvoices PI ON PI.ContactID = P.ContactID 
LEFT JOIN Countries CO ON CO.CountryID = C.CountryID 
LEFT JOIN States S ON S.StateID = C.StateID 
WHERE PI.PayableInvoiceID = 4 
+0

감사 CW'd 자동으로됩니다 ON PI.ProviderID = P.ProviderID 그러나 원래 코드가 작동 중이며 해당 ID 4 행의 "providerid"값이 누락되었음을 발견했습니다. – johnshaddad