Я считаю, что следующее должно исправить вашу проблему.
USE SalesLT
SELECT
c.LastName,
c.FirstName,
c.CompanyName,
ca.AddressType,
a.AddressLine1,
a.City,
a.StateProvince
FROM
Customer c
JOIN
CustomerAddress ca
ON c.CustomerID=ca.CustomerID
JOIN
Address a
ON ca.AddressID=a.AddressID
WHERE
c.FirstName = 'Virginia'
AND c.LastName = 'Miller'
При построении SQL-запроса, я считаю, что лучше всего начать с выбора данных, которые я хочу получить из своей основной таблицы. Поэтому в случае этого запроса вы ищете информацию о конкретном клиенте (в этом примере вы дали ему Вирджинию Миллер). Поэтому просто получение информации об этом клиенте будет выглядеть примерно так.
USE SalesLT
SELECT
c.LastName,
c.FirstName
FROM
Customer c
WHERE
c.FirstName = 'Virginia'
AND c.LastName = 'Miller'
Так что вы сделали там запускается указано, какие базы данных вы собираетесь использовать (это SalesLT линия USE). Это поможет с типизацией, поэтому вам не нужно добавлять ее перед каждым именем таблицы.
Далее вы выбираете имена столбцов, которые вас интересуют (LastName и FirstName). У них есть "c." перед ними, чтобы указать псевдоним или «псевдоним» таблицы, мы говорим, что SQL может найти эти данные.
В строке «FROM» вы можете видеть, что вы говорите SQL, чтобы посмотреть в Customer table и что вы собираетесь присвоить этой таблице псевдоним «c», чтобы вы могли быстро ссылаться на него и разъяснять, какие столбцы принадлежат к какому из таблиц в вашем запросе.
Теперь, когда вы возвращаете данные для Вирджинии Миллер, вы можете посмотреть следующий фрагмент. Вам нужен адрес для Вирджинии, поэтому вам потребуется какой-то способ связать адресные данные с данными клиента.
К счастью, база данных AdventureWorks делает это довольно легко, потому что у них есть таблица «join» CustomerAddress. Подобная таблица предназначена для простых записей ссылок между двумя таблицами с некоторыми типами столбцов идентификаторов. В этом случае он связывает CustomerID (который является столбцом в таблице Customer) и AddressID (который является столбцом в таблице Address), чтобы мы могли выяснить адреса, которые могут иметь определенные клиенты.
Итак, теперь мы знаем, что нам понадобятся данные от CustomerAddress, поэтому мы должны добавить эту следующую часть в наш запрос.
USE SalesLT
SELECT
c.LastName,
c.FirstName,
c.CompanyName,
ca.AddressType
FROM
Customer c
JOIN
CustomerAddress ca
ON c.CustomerID=ca.CustomerID
WHERE
c.FirstName = 'Virginia'
AND c.LastName = 'Miller'
Новые части в приведенном выше коде являются добавление выбора AddressType из таблицы CustomerAddress, а затем говорить SQL, как связаны таблицы клиентов и таблицы CustomerAddress. Он может связывать записи между ними, потому что CustomerID в таблице Customer равен идентификатору клиента в таблице CustomerAddress (JOIN CustomerAddress ca ON c.CustomerID = ca.CustomerID). «Ca» - это ник или псевдоним, который мы предоставили таблице CustomerAddress, чтобы вы использовали это, чтобы ссылаться на него везде в запросе.
Теперь, когда у нас есть эта часть запроса, мы готовы к заключительному этапу получения фактической адресной информации.
USE SalesLT
SELECT
c.LastName,
c.FirstName,
c.CompanyName,
ca.AddressType
FROM
Customer c
JOIN
CustomerAddress ca
ON c.CustomerID = ca.CustomerID
JOIN
Address a
ON a.AddressID = ca.AddressID
WHERE
c.FirstName = 'Virginia'
AND c.LastName = 'Miller'
Этот последний шаг просто добавил дополнительную информацию о том, как таблица адресов связана с таблицей CustomerAddress. В основном столбец AddressID в CustomerAddress равен столбцу AddressID в адресе.
И теперь мы возвращаемся к исходному запросу со всей необходимой информацией, таблицы SQL могут находить данные и отношения, которые мы определили между таблицами.
Решение проблемы шаг за шагом обычно является хорошим способом.
Ваш «От» линии должны иметь только одну таблицу в списке.Строки «join» - это те, которые указывают SQL дополнительные таблицы, из которых вы хотите получить информацию. Так в чем же проблема? Вы объяснили, чего хотите, но не то, что вы пробовали, и какую ошибку или проблему у вас есть. –
Извините, я получаю слишком много строк назад, я должен получить только 2 результата запроса. У меня есть ужасное время с этим, и я пытаюсь понять. –
Запрос выглядит корректно с указанными строками, такими как все, что находится под Select. Я хочу, что так оно и есть? Чтобы показать, что мне нужно в запросе? Это то, где работают соединительные столы? Извините, я очень смущен, но благодарю вас за помощь. –