2010-07-28 35 views
0

我有這樣的SQL Server語句,我不知道爲什麼它沒有返回記錄:SQL服務器連接並在報表不工作

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,名字,姓氏,地址1,城市,郵編
  • 商表:其列包括providerid,使用ContactID
  • payableinvoices表:它小號列包括payableinvoiceid,providerid

所以它是主鍵和外鍵簡單地連接在一起,以獲得要求對應於「payableinvoiceid」,它具有分配給它的供應商領域。

請幫忙。謝謝!

+0

我沒有看到明確加入「提供者」 – Oded 2010-07-28 08:42:55

+2

爲什麼這個問題已經成爲社區維基? – codingbadger 2010-07-28 08:48:08

+0

@Barry:原來的問題格式很差,所以很多人繼續編輯它。相當巧合,五人在一分鐘內編輯它,不知道其他編輯。通過設計,修改的X後,問題是自動CW'd – 2010-07-29 11:36:37

回答

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 ... FROM提供商」,例如您的方式工作:

  • 開始一個基本的「選擇.. ..FROM提供商」
  • 添加INNER JOIN到payableinvoices ...測試
  • 添加WHERE條件...測試 等等等等

那麼你很快就會發現其中的行是被裁決噸。

+0

我發現我的舊代碼正在工作。只是那一行特定的值「4」沒有與它相關聯的「提供者」!謝謝 ! – johnshaddad 2010-07-28 08:57:22

1

嘗試使用:

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

謝謝,這表明由於這樣的錯誤: INNER JOIN PayableInvoices PI ON PI.ContactID = P.ContactID 它應該是 INNER JOIN PayableInvoices PI ON PI.ProviderID = P.ProviderID 但是,我發現我的原始代碼正在工作,只是缺少值爲「providerid」的那行id爲「4」。 – johnshaddad 2010-07-28 08:58:22