在同一列上组合两个表

时间:2016-06-01 21:16:17

标签: sql sql-server

我有2张表格如下所示:

TABLE 1: Name   Age  Weight(Kilo)
         Tom    16     56
         Alex   29     89 

TABLE 2: Name  Age   Sex
         Tom   16     M
         Alex  29     M

我想得到什么:

TABLE 3: Name  Age  Sex  Weight(Kilo)
         Tom   16   M     56
         Alex  29   M     89

我尝试过Union / Union All,但它不起作用。还尝试使用Join但它给了我一个重复值的表。知道怎么做吗?

4 个答案:

答案 0 :(得分:4)

假设您的姓名/年龄段值恰好在两个表格之间匹配,JOIN就是您正在寻找的内容。

select t1.Name, t1.Age, t2.Sex, t1.Weight
from Table1 t1
join Table2 t2 on t1.Name = t2.Name and t1.Age = t2.Age

如果表之间没有匹配的可能性,请从记录数量较大的表开始,然后进行左外连接:

例如,假设Table1包含每个人,但Table2可能缺少一些:

select t1.Name, t1.Age, t2.Sex, t1.Weight
from Table1 t1
left join Table2 t2 on t1.Name = t2.Name and t1.Age = t2.Age

如果您在任何一个表中都有不在另一个表中的记录,那么完整的外部联接将起作用:

select
    coalesce(t1.Name, t2.Name) [Name]
    ,coalesce(t1.Age, t2.Age) [Age]
    ,t2.Sex
    ,t1.Weight
from Table1 t1
full join Table2 t2 on t1.Name = t2.Name and t1.Age = t2.Age

答案 1 :(得分:3)

因为看起来你没有PRIMARY KEY

SELECT 
  t1.*,
  t2.Sex
FROM 
  table1 t1
INNER JOIN
  tabel2 t2 on t1.Name = t2.Name and t1.Age = t2.Age

这很可能仍会在较大的数据集中造成一些重复,但我假设您正在寻找逻辑并发布了一些虚拟数据。

答案 2 :(得分:2)

JOIN正是您所需要的,但您需要加入唯一标识符。在这种情况下,Name列对于这两个记录是唯一的,但通常JOIN是在生成的ID上完成的,例如CustomerID或ClientID。与其他人发布的一样,您可以将其他列与Name列结合使用,以确保您不会通过在JOIN子句的ON部分中添加这些列来获取重复项。

SELECT t1.Name, t1.Age, t2.Sex, t1.Weight
FROM Table1 t1
INNER JOIN Table2 t2
ON (t1.Name = t2.Name)

我建议添加一个唯一标识符作为主键,以便将来更容易进行JOIN。

答案 3 :(得分:0)

SELECT t1。*,t2.Sex FROM table1 t1 LEFT JOIN table2 t2 ON t1.Name = t2.Name