2010-07-28 2 views
0

Я имею это заявление SQL Server, и я не знаю, почему он не возвращается никаких записей: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" 

Просто, у меня есть следующие таблицы:

  • Таблица контактов: его столбцы включают контактный адрес, имя, фамилию, адрес1, город, zip
  • Таблица поставщиков: его столбцы включают провайдер, контактный
  • payableinvoices table: ее столбцы включают payableinvoiceid, providerid

Так просто связывающую первичные ключи и внешние ключи вместе, чтобы получить требуют полей, которые соответствуют этому «payableinvoiceid», который имеет провайдер, возложенный на него.

Пожалуйста, помогите. Благодаря!

+0

Я не вижу явного участия в 'Провайдерах' – Oded

+2

Почему этот вопрос был задан для сообщества wiki? – codingbadger

+0

@Barry: исходный вопрос был очень плохо отформатирован, поэтому многие люди пошли дальше и отредактировали его. по совпадению, пять человек отредактировали его в течение одной минуты, не зная о других изменениях. дизайн, после X правок, вопрос автоматически CW'd –

ответ

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-провайдеров», например:

  • начала с основным «SELECT .. поставщики ..FROM»
  • добавить INNER JOIN в payableinvoices ... тест, который
  • добавить условие WHERE ... тест, и т.д. и т.п.

Таким образом, вы скоро обнаружите, где ряды правит ou т.

+0

Я обнаружил, что мой старый код работает. Просто определенная строка значения «4» не ассоциировалась с «поставщиком». Благодаря ! – johnshaddad

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

Смежные вопросы