使用join创建表作为select

时间:2016-05-12 05:11:51

标签: mysql

我需要在表A和表B之间创建包含所有不匹配id的表。这两个表都有一些匹配的字段,但我只需要表A中的所有列

表A

ID NAME address       Phone
12  xyz  some street   1234566
22  xyz  some street   1234566
3  xyz  some street   1234566

表B

ID Vendor_NAME address       Phone    email
1  xyz         street       1234566  xyz@gmail.com
2  xyz         street       1234566
3  xyz         street       1234566

结果表 - 表C

ID NAME address       Phone
12  xyz  some street   1234566
22  xyz  some street   1234566

我正在使用此查询来获取表A中所有未匹配的值

select *  from A left join B on A.ID=B.ID where B.ID is null

这给了我表A和表B中的所有字段。如何创建表C,使其只有表A中不匹配的值和字段。

使用表C更新表B

表B

ID   Vendor_NAME           street_address Phone    email
1  xyz         street         1234566  xyz@gmail.com
2  xyz         street         1234566
3  xyz         street         1234566

表C

ID  NAME  address        Phone
12  xyz   some street    1234566
22  xyz   some street    1234566

更新表格B

ID   Vendor_NAME           street_address Phone    email
1     xyz                   street         1234566  xyz@gmail.com
2     xyz                   street         1234566
3     xyz                   street         1234566
12    xyz                   some street      1234566
22    xyz                   some street      1234566

表B具有相同的数据,但具有不同的列名,并且几乎没有额外的列。我想插入表C表B中的所有数据。

1 个答案:

答案 0 :(得分:1)

使用SELECT * INTO会对您的情况有所帮助。无需创建表模式。 它会自动创建表以及列的数据类型

CREATE Table TableC as SELECT A.* 
FROM TableA 
LEFT JOIN TableB ON A.ID = B.ID 
WHERE B.ID IS NULL

根据OP的新请求更新答案:

INSERT INTO TableB (ID, Vendor_NAME, street_address, Phone, email)
SELECT ID, NAME, address, Phone, NULL
FROM TableC

注意:如果email不是空列,则代替NULL放置两个单引号''