不是我的工作,我对SQL知之甚少,我的问题是如何解决这个问题。我希望这个问题不是太通用或毫无意义:
我在db中有几个表。其中很少是基本表,国家列表,客户列表等。 这些基本表用于支持其他网格上的dropDownLists中的值,其中用户对某些字段使用预设值,并且还手动填写其他字段。像这样:
现在,我正在制作一个动态报告,指向我需要获取实际值而不是参考的表。
正如我所说,我遇到的问题是我正在处理的特定表中的那些预设值是id_references(id_Country,id_Customer,..),而我需要它们代表的实际值。 我该怎么做才能得到实际值?如果我将报告指向不同的表格,我会忽略记录之间的含义/链接。
答案 0 :(得分:17)
例如,如果您尝试使用问题中显示的此项目表中的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'
1)SELECT子句您可以在结果集中选择所需的列
2)FROM you提及表格名称
3)ON子句定义表之间的关系Say Projects表有一个列id_Country,它引用于Countries表中的id_Country定义了这两个表之间的关系。
4)选择列列表,数据源(表格),它们的关系(On Clause)后,您可以过滤从您查询返回的行数,就像您可以像id_Country一样
在哪里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'
但是你真的需要查看连接,因为你可以在表之间进行不同类型的连接,在这个例子中,我使用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
使用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