如何从另一个表中获取引用值?

Fel*_*ceM 13 sql sql-server

不是我的工作,我对SQL知之甚少,我的问题是如何解决这个问题.我希望这个问题不太通用或毫无意义:

我在db中有几个表.其中很少是基本表,国家列表,客户列表等.这些基本表用于支持其他网格上的dropDownLists中的值,其中用户对某些字段使用预设值,并且还手动填写其他字段.像这样的东西:

在此输入图像描述

现在,我正在制作一个动态报告,指向我需要获取实际值而不是参考的表.

正如我所说,我遇到的问题是我正在处理的特定表中的那些预设值是id_references(id_Country,id_Customer,..),而我需要它们代表的实际值.我该怎么做才能得到实际值?如果我将报告指向不同的表格,我会忽略记录之间的含义/链接.

M.A*_*Ali 18

例如,如果您试图通过在问题中显示的此项目表中使用Country_ID来获取国家/地区的名称,您可以执行类似的操作

SELECT C.CountryName_Colummn, C.SomeOtheColumn, ......
FROM Projects P INNER JOIN Countries C
ON P.id_Country = C.id_Country
WHERE SomeColum = 'Your Condition'
Run Code Online (Sandbox Code Playgroud)

1)SELECT子句您可以在结果集中选择所需的列.
2)FROM你提及表名(s)
3)ON子句你定义表之间的关系Say Projects表有一个列id_Country,它引用于Countries表中的id_Country定义了这两个表之间的关系.
4)选择列列表,数据源(表),它们的关系(On Clause)之后,您可以过滤从您查询返回的行数,就像您可以像id_Country
WHERE C.CountryName ='UK'那样只会从英国返回结果.
5)在Clause中,字母'C'和'P'是别名所以我们不必再次输入全表名,使我们的代码更简单,更容易阅读和调试.

无论您需要加入多少个表来获取所需的数据,只要您可以在查询中定义它们之间的关系,它就可以正常工作.SQL服务器很少会在一个表中找到所有必需的数据,通常你会加入2-3个表或更多的表.例如,你想要一些存在于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'
Run Code Online (Sandbox Code Playgroud)

但是你真的需要查看连接,因为你可以在表之间进行不同类型的连接,在这个例子中,我使用INNER JOIN只返回所有这些表之间的匹配行,你可以做LEFT JOIN或RIGHT JOIN.
LEFT JOIN返回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
Run Code Online (Sandbox Code Playgroud)

使用Alias将为您提供完全相同的reuslt但易于阅读的代码也尝试这个....

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
Run Code Online (Sandbox Code Playgroud)