如何在数据库中的两个表之间进行匹配,然后将数据混合到一个新的表/视图中?

时间:2017-04-20 14:51:59

标签: sql-server database sql-server-express

我在数据库中有两个表。让我们称他们为“a”和“b”。我在这两个表中都有一个类似的字段,其中任何一个都不是主键,可用于将数据匹配在一起。

“a”和“b”都包含完全不同类型的数据。 “a”有5个字段,whislt“b”有8个字段。我正在使用SQL Server Express和localdb。

如何从两个表中获取所有字段,并对两个表中的类似字段进行匹配,然后将连接的数据放入新表或视图中?

以下是一些示例数据:

表格“a”

def log(fun):
    def wrapper(*args):
          print('in decorator!')
          return fun(*args)
    return wrapper

@log
def sum_(a,b):
    return a+b

print sum_(1,2)

表格“b”

   ID    ClientID     ClientName     URL                    SoftwareID

    1     12345        Example 1      www.testuri.com        017AAA93o45B
    2     13579        Example 2      www.google.com         029AAA93k32D
    3     29384        Example 3      www.stackoverflow.com  022AAA93j22T

“ClientID”字段是两者之间相似的字段。

1 个答案:

答案 0 :(得分:1)

这将创建一个名为myNewTableName的新表,其中包含两个表中每个clientId的数据。新创建的表的列数据类型将与原始列中的列相同。

SELECT [a].[ID] AS [aID]
    , [a].[ClientID]
    , [a].[ClientName]
    , [a].[URL]
    , [a].[SoftwareID]
    , [b].[ID] AS [bID]
    , [b].[Username]
    , [b].[Email]
    , [b].[Phone]
    , [b].[Software]
INTO [myNewTableName]
FROM [a]
    INNER JOIN [b]
        ON [a].[ClientID] = [b].[ClientID]

如果您不想要包含此信息的永久表,因为它经常更改但希望能够一起查看和查询这些列,那么请尝试创建一个视图(这可能是您想要的而不是另一个表冗余数据)。

GO

CREATE VIEW [dbo].[vw_myViewName] AS
SELECT [a].[ID] AS [aID]
    , [a].[ClientID]
    , [a].[ClientName]
    , [a].[URL]
    , [a].[SoftwareID]
    , [b].[ID] as [bID]
    , [b].[Username]
    , [b].[Email]
    , [b].[Phone]
    , [b].[Software]
FROM [a]
    INNER JOIN [b]
        ON [a].[ClientID] = [b].[ClientID]

GO

然后,您可以从视图中选择信息,就像使用任何普通表一样,但它会运行查询并显示结果。使用以下命令查询新视图:

SELECT *
FROM [dbo].[vw_myViewName]