18

这不是我的工作,我对 SQL 的了解仍然很少,我的问题是如何解决这个问题。我希望这个问题不是太笼统或毫无意义:

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

在此处输入图像描述

现在,我正在处理一个动态报告,该报告指向我需要获取实际值而不是引用的表。

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

4

1 回答 1

26

例如,如果您尝试通过在问题中显示的此项目表中使用 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 Mention table(s) name(s)
3) ON 子句定义表之间的关系说 Projects 表有一个 id_Country 列,它引用国家表中的 id_Country 定义了这两个表之间的关系。
4)在您选择了列列表、数据源(表)、它们的关系(On Clause)之后,您可以过滤从查询返回的行数,就像您可以像 id_Country
WHERE C.CountryName = 'UK'将仅从英国返回结果。
5) 在 from Clause 中,字母 'C' 和 'P' 是别名,因此我们不必再次输入完整的表名 n,使我们的代码更简单,更易于阅读和调试。

无论您必须加入多少个表才能获得所需的数据,只要您可以在查询中定义它们之间的关系表,它应该可以正常工作。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 关键字 LEFT 侧的表中的所有行,并且只返回其他表中的匹配行。
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 将为您提供完全相同的结果,但易于阅读的代码也可以试试这个....

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
于 2013-10-13T19:17:40.033 回答