首页 > 解决方案 > 从其他表中获取数据匹配

问题描述

我在 SQL 服务器中有三个名为sold、 details 和 customer的表,我的查询是,在 sold 表中,我有一个归档 INV-NO,它是 details 表中名为 BILL-NO 和 details 表中的公共字段我有一个字段 CUSTID,它也在客户表中。如何从已售表中的客户表中获取与已售 AND 详细信息表中的 INV-NO 匹配的 CUSTID 和客户名称。

在此处输入图像描述

然后 CUSTID 和 Customer 字段在已售表中为空白我想从其他两个表中填充它们。可能吗

标签: sqlsql-serverjoin

解决方案


您可以通过内部连接获取它以检索客户名称。

SELECT [C].[NAME] 
   FROM [SOLD] S
   JOIN [DETAILS] D ON [S].[INV-NO] = [D].[BILL-NO]
   JOIN [CUSTOMER] C ON [D].[CUSTID] = [C].[CUSTID]

如果要使用客户名称更新 [SOLD] 表,则:

UPDATE S
   SET [S].[CUSTID] = [C].[CUSTID], [S].[CUSTOMER] = [C].[NAME]
FROM [SOLD] S
       JOIN [DETAILS] D ON [S].[INV-NO] = [D].[BILL-NO]
       JOIN [CUSTOMER] C ON [D].[CUSTID] = [C].[CUSTID]

如果您提供了一些示例数据,将会很有帮助。

根据评论,如果您正在尝试使用 MS ACCESS,则通过将 JOIN 替换为 INNER JOIN 来尝试相同的查询,如下所示(对于 MS ACCESS ):

SELECT [C].[NAME] 
   FROM [SOLD] S
   INNER JOIN [DETAILS] D ON [S].[INV-NO] = [D].[BILL-NO]
   INNER JOIN [CUSTOMER] C ON [D].[CUSTID] = [C].[CUSTID]

如果您正在更新,则以下查询适用于 MS-ACCESS:

UPDATE S
   SET [S].[CUSTID] = [C].[CUSTID], [S].[CUSTOMER] = [C].[NAME]
FROM [SOLD] S
       INNER JOIN [DETAILS] D ON [S].[INV-NO] = [D].[BILL-NO]
       INNER JOIN [CUSTOMER] C ON [D].[CUSTID] = [C].[CUSTID]

推荐阅读