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

How do you do a match between two tables in a database and then mash the data together into a new table/view?

我在数据库中有两个 table。让我们称它们为 "a" 和 "b"。我在这两个 table 中都有一个相似的字段,其中一个都不是主键,可以用来匹配数据。

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

我如何从两个 table 中获取所有字段,并在两个 table 中匹配相似的字段,然后将连接的数据放入一个新的table 还是查看?

这是一些示例数据:

table "a"

   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.whosebug.com  022AAA93j22T

table "b"

ID    ClientID     Username     Email                   Phone            Software

1     29384        User 1      email@email.email        02932 423834     Software 1
2     29384        User 2      email@email.email        02134 234829     Software 2
3     12345        User 3      email@email.email        01293 021924     Software 1

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

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

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]

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

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 视图中的信息,就像使用任何普通 table 一样,但它会 运行 查询并向您显示结果。使用以下命令查询您的新视图:

SELECT *
FROM [dbo].[vw_myViewName]