我有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但它给了我一个重复值的表。知道怎么做吗?
答案 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