Как получить ссылочные значения из другой таблицы?

Не будучи этой моей работой, я все еще очень мало знаю о SQL, мой вопрос - получить указания о том, как подойти к этой проблеме. Я надеюсь, что вопрос не слишком общий или бессмысленный:

У меня есть несколько таблиц в db. Немногие из них - это основные таблицы, список стран, список клиентов и т.д. Эти базовые таблицы используются для поддержки значений в dropDownLists на других сетках, где пользователи используют предустановленные значения для определенных полей, а также заполняют другие поля вручную. Что-то вроде этого:

enter image description here

Теперь я работаю над динамическим отчетом, который указывает на таблицу, где мне нужно получить фактические значения, а не ссылки.

Как я уже сказал, проблема в том, что эти предустановленные значения в этой конкретной таблице, над которой я работаю, - это id_references (id_Country, id_Customer,..), в то время как мне нужно фактическое значение, которое они представляют. Что мне делать, чтобы получить фактические значения? Если я укажу свой отчет на разные таблицы, я потеряю значение/ссылку между записями.

Ответ 1

Например, если вы пытаетесь получить имя страны с помощью параметра Country_ID в этой таблице Project, указанной в вашем вопросе, вы можете сделать что-то вроде

SELECT C.CountryName_Colummn, C.SomeOtheColumn, ......
FROM Projects P INNER JOIN Countries C
ON P.id_Country = C.id_Country
WHERE SomeColum = 'Your Condition'

1) SELECT. Вы выбираете столбцы, которые вам нужны в вашем наборе результатов.
2) FROM you name имя (имена)
3) В разделе ON вы определяете взаимосвязь между таблицами. Таблица "Проекты" имеет столбец id_Country, который ссылается на таблицу id_Country в странах, определяет взаимосвязь между этими двумя таблицами.
4) После того, как вы выберете список столбцов, Источник данных (таблицы), Их взаимосвязь (On Clause), вы можете отфильтровать количество строк, возвращающихся из вашего запроса, например, вы можете что-то вроде id_Country
WHERE C.CountryName = 'UK' вернет результаты только из Великобритании.
5) В разделе "Пункты" буквы "C" и "P" являются псевдонимами, поэтому нам не нужно снова вводить полные имена таблиц снова n, делает наш код более простым и легким для чтения и отладки.

Независимо от того, сколько таблиц вы должны объединить, чтобы получить требуемые данные, если вы можете определить взаимосвязь между ними в своем запросе, он должен работать нормально. SQL-сервер редко вы найдете все необходимые данные в одной таблице, как правило, вы присоединитесь к 2-3 таблицам или более таблицам. Например, вам нужны некоторые данные, которые присутствуют в трех разных таблицах, которые вы бы присоединили к ним все три в одном запросе, что-то вроде этого...

SELECT C.CountryName_Colummn, C.SomeOtheColumn, ......
FROM Projects P INNER JOIN Countries C
ON P.id_Country = C.id_Country
INNER JOIN Table_3_Name T3
ON T3.CommonColumn = P.SomeCommonColumn (it will be a common column between table 3 and Projects OR Countries)
WHERE SomeColum = 'Your Condition'

Но вам действительно нужно искать в объединениях, поскольку вы можете делать разные типы соединений между таблицами. В этом примере я использовал INNER JOIN, который возвращает только соответствующие строки между всеми этими таблицами, вы можете делать LEFT JOIN или RIGHT JOIN.

LEFT JOIN возвращает все строки из таблицы на стороне LEFT ключевого слова JOIN и соответствует только строкам из других таблиц.
RIGHT JOIN возвращает все строки из правой части ключевого слова JOIN и только мантирует строки из других таблиц.

Запросы с желаемыми столбцами

Select customers.customer_name, Products.Product_type, Manufacturers.Manuf_name 
from Projects inner join customers
on     customers.cust_id= Projects.proj_cust_id
inner join Products
on     Products.prod_id= Projects.proj_prod_id
inner join Manufacturers
on     Manufacturers.man_id= Projects.proj_man_id

Использование псевдонима даст вам точно такое же повторное использование, но легко читаемый код также попробует это....

Select C.customer_name, Prod.Product_type, M.Manuf_name 
from Projects Proj inner join customers C
on     C.cust_id= Proj.proj_cust_id
inner join Products Prod
on     Prod.prod_id= Proj.proj_prod_id
inner join Manufacturers M
on     M.man_id= Proj.proj_man_id