如何在ms sql server中为表的每一行创建select?

如何在ms sql server中为表的每一行创建select?,sql,sql-server,foreach,Sql,Sql Server,Foreach,假设我有三张桌子: 如何从products表中选择处于活动状态的code(=1)以及存在于表行中且来自KYT类型文档的行编号和文档ID 例如,输出应类似于: 显然,它应该是这样开始的 SELECT DOCUMENT ID FROM [TABLE DOCUMENT] WHERE TYPE='KYT' 然后为每一行做点什么。我不知道如何实现这一点,你要找的就是加入。下面是从所有三个表中选择所有行的联接。玩玩它 联接是关系数据库管理系统必须了解的基本概念。它们可以像这个例子一样直截了当,也可

假设我有三张桌子:

如何从products表中选择处于活动状态的
code
(=1)以及存在于表行中且来自KYT类型文档的
行编号和
文档ID

例如,输出应类似于:

显然,它应该是这样开始的

SELECT DOCUMENT ID
FROM [TABLE DOCUMENT]
WHERE TYPE='KYT'

然后为每一行做点什么。我不知道如何实现这一点,你要找的就是加入。下面是从所有三个表中选择所有行的联接。玩玩它

联接是关系数据库管理系统必须了解的基本概念。它们可以像这个例子一样直截了当,也可以根据您需要它们做什么变得非常疯狂。如果要继续使用SQL,您需要精通这些

SELECT * 
FROM products p
INNER JOIN lines L ON p.[Products ID]=L.[Product ID]
INNER JOIN document d ON L.[Document ID]=d.[Document ID]
我会帮你分析一下,让你更好地了解到底发生了什么

FROM products p
“p”称为别名。这是一种缩短表名的方法,您可能需要多次编写,并且有助于提高可读性。您可以随意使用别名,但我建议您将其设置为有意义的别名,比如我在产品中使用p之类的示例

INNER JOIN lines L ON p.[Products ID]=L.[Product ID]

ON子句用于将表“绑定”在一起。这通常是架构中的外键关系。要加入“ON”的列是相同的数据元素。一个基本示例与此完全相同–产品ID在两个表中,这就是我们如何将两个表中的数据关联在一起的方法

你要找的就是加入。下面是从所有三个表中选择所有行的联接。玩玩它

联接是关系数据库管理系统必须了解的基本概念。它们可以像这个例子一样直截了当,也可以根据您需要它们做什么变得非常疯狂。如果要继续使用SQL,您需要精通这些

SELECT * 
FROM products p
INNER JOIN lines L ON p.[Products ID]=L.[Product ID]
INNER JOIN document d ON L.[Document ID]=d.[Document ID]
我会帮你分析一下,让你更好地了解到底发生了什么

FROM products p
“p”称为别名。这是一种缩短表名的方法,您可能需要多次编写,并且有助于提高可读性。您可以随意使用别名,但我建议您将其设置为有意义的别名,比如我在产品中使用p之类的示例

INNER JOIN lines L ON p.[Products ID]=L.[Product ID]

ON子句用于将表“绑定”在一起。这通常是架构中的外键关系。要加入“ON”的列是相同的数据元素。一个基本示例与此完全相同–产品ID在两个表中,这就是我们如何将两个表中的数据关联在一起的方法

添加了
JOIN
行以加入3个表:

SELECT [PT].[CODE], [TL].[LINE NUM], [TD].[DOCUMENT ID]
FROM [TABLE DOCUMENT] as TD
JOIN [TABLE LINES]    as TL
    on TL.[DOCUMENT ID] = TD.[DOCUMENT ID]
JOIN [PRODUCTS TABLE] as PT
    on PT.[PRODUCTS ID] = TL.[PRODUCT ID]
WHERE TYPE='KYT' AND PT.ISACTIVE = 1

添加了
JOIN
行以加入3个表:

SELECT [PT].[CODE], [TL].[LINE NUM], [TD].[DOCUMENT ID]
FROM [TABLE DOCUMENT] as TD
JOIN [TABLE LINES]    as TL
    on TL.[DOCUMENT ID] = TD.[DOCUMENT ID]
JOIN [PRODUCTS TABLE] as PT
    on PT.[PRODUCTS ID] = TL.[PRODUCT ID]
WHERE TYPE='KYT' AND PT.ISACTIVE = 1

您应该以文本格式而不是图像格式放置表值。您需要熟悉
join
语句欢迎使用SQL(如果您使用的是SQL Server,则更具体地说是T-SQL)。您似乎刚刚开始学习该语言,因此我建议您看看一些有关如何使用SQL的在线教程或指南。正如@gbeaven所说,这里你要问的是一个
加入
。有几种类型的
连接
,例如
内部
,和
完整
左侧
,和
右侧外部
。这些是语言最基本的部分之一,因此学习它们各自的功能和使用时间是值得的。我没有用三个表再次这样做,也不确定。我只做了两次…。@F.Mysir当你问问题时,有几件事可以帮助你,限制包含数据的“图像”。人们可以更容易地将数据复制粘贴到表中并进行自我测试,但不能从图像中复制数据。此外,添加您已经尝试过的代码有助于我们了解您可能遇到的问题-尝试提供您已经尝试过的示例代码。您应该将表值以文本格式而不是图像格式放置。您需要熟悉
join
语句欢迎使用SQL(如果您使用的是SQL Server,则使用更具体的T-SQL)。您似乎刚刚开始学习SQL语言,因此我建议您查看一些有关如何使用SQL的在线教程或指南。正如@gbeaven所说,这里您要问的是一个
连接
。有几种类型的
连接
,例如
内部
,和
完整
左侧
,和
右侧OUTER
。这些是语言最基本的部分之一,因此学习它们各自的作用以及何时使用它们是值得的。我没有用三个表再次这样做,也不确定。我只做了两次…。@F.Mysir当你问问题时,有几件事可以帮助你,限制“图像”其中包含数据。人们可以更轻松地将数据复制粘贴到表中并进行自我测试-但不能从图像中复制。此外,添加您已经尝试过的代码可以帮助我们了解您可能遇到的问题-尝试提供您已经尝试过的示例代码。我编辑了我的帖子,我添加了一个活动的帖子在
WHERE
语句中,我正在使用
WHERE TYPE='KYT'和ISACTIVE=1
唯一要添加的是,它显示了
模棱两可的列名'[DOCUMENT ID]'
,我将其更改为
TD.[DOCUMENT ID]
,并且它工作了:D@F.Mysir啊,对,模棱两可,因为[文档ID]存在于多个表中。我编辑了我的答案。我编辑了我的帖子,在我使用的
WHERE
语句
WHERE TYPE='KYT'和ISACTIVE=1
中添加了一个活动的帖子。我唯一想添加的是,它显示了
不明确的列名“[DOCUMENT ID]”
我将其更改为
TD.[DOCUMENT ID]
,它成功了:D@F.Mysir啊,对,模棱两可,因为[DOCUMENT ID]存在于多个表中。我已经编辑了我的答案。