我有两个表TableA和TableB。我想获得一个新的表值,我想要TableA的所有值,而TableB仅一个列的值。 两个表都有5列,其中四个列名称相同,仅第五列名称不同。我想要的是从TableA获取五个列值,并将TablelB的第五个列值插入到TableA中作为第六个列
我尝试使用UNION,UNION ALL,但没有获得预期的输出。我还尝试从TableB提取第五列的值,然后插入到第六列的TableA中,但不确定我在哪里做错了。无法获得预期的价值
样本数据:
表A
id name age address entrydatetime
1 AA 20 tyk 2019-05-13:8:35:00
2 AAA 22 tyl 2019-05-13:9:40:00
TableB
id name age address exitdatetime
1 AA 20 tyk 2019-05-13:15:20:00
2 AAA 22 tyl 2019-05-13:16:40:00
预期输出:
NewTable
id name age address entrydatetime exitdatetime
1 AA 20 tyk 2019-05-13:8:35:00 2019-05-13:15:20:00
2 AAA 22 tyl 2019-05-13:8:35:00 2019-05-13:16:40:00
答案 0 :(得分:1)
那很简单:
SELECT A.*, B.exitdatetime
FROM TableA A
INNER JOIN TableB B ON A.id = B.id;
当您需要将一个表的行与另一个表(甚至是同一个表,视为另一个表)中的0-N行进行匹配时,就需要加入表。
一种更好的方法是命名您需要的每个字段,而不使用*。我只是用它来做一个快速样本。
仅作记录用途,数据库未规范化,因此具有数据冗余,这意味着您可能会出现数据不一致。例如,如果此操作至少返回一行,则说明数据不一致:
SELECT *
FROM TableA A
INNER JOIN TableB B ON A.id = B.id
WHERE A.name != B.name OR A.age != B.age OR A.address != B.address;