如何连接至少两个列名不同但数据相同的表,并且只显示匹配的数据

J. *_*out 3 sql-server

我正在尝试组合两个(可能更多)表,这些表具有不同的列名,但在我尝试排列的列中具有相同的数据。例如,我有一个名为 dbo.member 的表,该表中有一个名为 UID 的列。在另一个名为 dbo.tasklist_data 的表上,有一个名为 TaskID 的列,其中包含一些与 UID 相同的数据。我正在寻找的是将两个表与结果结合起来,结果只给我成员表上的 UID,它与 tasklist_data 表上 TaskID 列中的数据相匹配。

我确实希望我解释得足够好。请耐心等待,因为我是新手,但渴望学习。任何帮助或建议将不胜感激。谢谢你。

Han*_*non 5

从高层次来看,您只需执行以下操作:

SELECT *
FROM dbo.member m
    INNER JOIN dbo.tasklist_data tld ON m.UID = tld.TaskID;
Run Code Online (Sandbox Code Playgroud)

所述INNER JOIN将采取的行从dbo.member其中UID列值相匹配包含在值TaskID从柱tasklist_data表。如果您想要来自 的所有行dbo.member,并且只需要来自 的匹配dbo.tasklist_data,您可以将其重写为:

SELECT *
FROM dbo.member m
    LEFT JOIN dbo.tasklist_data tld ON m.UID = tld.TaskID;
Run Code Online (Sandbox Code Playgroud)

Steve Stedman 有一个很好的资源来理解不同类型的JOIN语句是如何工作的。

如果您需要在两个以上的表上执行此操作,只需JOIN根据需要添加子句:

SELECT *
FROM dbo.member m
    INNER JOIN dbo.tasklist_data tld ON m.UID = tld.TaskID
    INNER JOIN dbo.some_other_table sot ON m.UID = sot.some_column_name;
Run Code Online (Sandbox Code Playgroud)

通过使用从查询子句中提到的所有表中SELECT *返回所有列,我打破了上述(可以说是)主要的罪过。明确指定所需的列通常被认为是一种很好的做法,例如:FROM

SELECT m.UID
    , m.SomeColumn1
    , m.SomeColumn2
    , tld.TaskID
    , tld.SomeColumn3
FROM dbo.member m
    INNER JOIN dbo.tasklist_data tld ON m.UID = tld.TaskID;
Run Code Online (Sandbox Code Playgroud)