Mysql 如何在SQL中合并两个表?
我有两张桌子:Mysql 如何在SQL中合并两个表?,mysql,sql,Mysql,Sql,我有两张桌子: Table 1 = idhash - username - usermail Table 2 = idhash - views - fistseen - lastseen 现在,我想将这些表合并到一个新表: Table 3 = idhash - username - usermail - firstseen - lastseen *请注意,我想删除“视图”列 我尝试过在谷歌上找到的解决方案,但到目前为止,它们似乎不起作用 并非表2中的所有idhash列在表1中都有相应
Table 1 = idhash - username - usermail
Table 2 = idhash - views - fistseen - lastseen
现在,我想将这些表合并到一个新表:
Table 3 = idhash - username - usermail - firstseen - lastseen
*请注意,我想删除“视图”列
我尝试过在谷歌上找到的解决方案,但到目前为止,它们似乎不起作用
- 并非表2中的所有idhash列在表1中都有相应的idhash。仍然使用空用户名和usermail存储那些“不匹配”的行
SELECT A.*, B.firstseen, B.lastseen
FROM [Table 1] A
LEFT JOIN [Table 2] B
ON A.idhash = B.idhash
并在[表3]中插入和更新结果:
INSERT INTO [Table 3](idhash, username, usermail, firstseen, lastseen)
SELECT A.*, B.firstseen, B.lastseen
FROM [Table 1] A
LEFT JOIN [Table 2] B
ON A.idhash = B.idhash
LEFT JOIN [Table 3] C
ON A.idhash = C.idhash
WHERE C.idhash IS NULL
-- For SQL Server
UPDATE T3
SET firstseen = T1.firstseen,
lastseen = T1.lastseen
FROM [Table 3] T3
INNER JOIN (SELECT A.*, B.firstseen, B.lastseen
FROM [Table 1] A
LEFT JOIN [Table 2] B
ON A.idhash = B.idhash) T1
WHERE T3.firstseen != T1.firstseen OR T3.lastseen != T1.lastseen
此查询将为您提供以下结果:
SELECT A.*, B.firstseen, B.lastseen
FROM [Table 1] A
LEFT JOIN [Table 2] B
ON A.idhash = B.idhash
并在[表3]中插入和更新结果:
INSERT INTO [Table 3](idhash, username, usermail, firstseen, lastseen)
SELECT A.*, B.firstseen, B.lastseen
FROM [Table 1] A
LEFT JOIN [Table 2] B
ON A.idhash = B.idhash
LEFT JOIN [Table 3] C
ON A.idhash = C.idhash
WHERE C.idhash IS NULL
-- For SQL Server
UPDATE T3
SET firstseen = T1.firstseen,
lastseen = T1.lastseen
FROM [Table 3] T3
INNER JOIN (SELECT A.*, B.firstseen, B.lastseen
FROM [Table 1] A
LEFT JOIN [Table 2] B
ON A.idhash = B.idhash) T1
WHERE T3.firstseen != T1.firstseen OR T3.lastseen != T1.lastseen
这应该是一个好的开始。在我们提供更具体的信息之前,您需要告诉我们如何处理不匹配的记录
Select
table1.idhash
,username
,usermail
,firstseen
,lastseen
From table1
left join table2
on table1.idhash = table2.idhash
这应该是一个好的开始。在我们提供更具体的信息之前,您需要告诉我们如何处理不匹配的记录
Select
table1.idhash
,username
,usermail
,firstseen
,lastseen
From table1
left join table2
on table1.idhash = table2.idhash
使用Create语句中的字段类型创建新表
然后在表3中插入一个
,在a.id=b.id上从表1 a、表2 b中选择a.f1、b.f2、c.f3,用Create语句中的字段类型创建新表
然后在表3中插入一个,在a.id=b.id上从表1a、表2b中选择a.f1、b.f2、c.f3,这非常接近暴力
select coalesce(t1.idhash, t2.idhash) as idhash
, username
, usermail
, firstseen
, lastseen
into table3
from table1 t1
cross join table2 t2
这是非常接近暴力的
select coalesce(t1.idhash, t2.idhash) as idhash
, username
, usermail
, firstseen
, lastseen
into table3
from table1 t1
cross join table2 t2
试试这个:
INSERT INTO table3 (idhash, username, usermail, firstseen, lastseen)
SELECT a.idhash, a.username, a.usermail,
b.firstseen, b.lastseen
FROM table1 a LEFT JOIN table2 b
ON a.idhash = b.idhash
试试这个:
INSERT INTO table3 (idhash, username, usermail, firstseen, lastseen)
SELECT a.idhash, a.username, a.usermail,
b.firstseen, b.lastseen
FROM table1 a LEFT JOIN table2 b
ON a.idhash = b.idhash
我会这样做:
CREATE TABLE table3
AS
SELECT idhash, username, usermail, firstseen, lastseen
FROM Table1
NATURAL FULL OUTER JOIN Table2
我会这样做:
CREATE TABLE table3
AS
SELECT idhash, username, usermail, firstseen, lastseen
FROM Table1
NATURAL FULL OUTER JOIN Table2
以下是MySQL的解决方案:
CREATE TABLE table3
// First get all the rows from table2, paired with matching rows from table1
(SELECT a.idhash, b.username, b.usermail, a.firstseen, a.lastseen
FROM table2 a
LEFT JOIN table1 b
ON b.idhash = a.idhash)
// Now get the remaining rows from table1 that don't have matches
UNION ALL
(SELECT null, a.username, a.usermail, null, null
FROM table1 a
LEFT JOIN table2 b
ON b.idhash = a.idhash
WHERE b.idhash IS NULL)
如果不希望表1中的行在表2中没有对应的行,请删除UNION
子句中的第二个查询。以下是MySQL的解决方案:
CREATE TABLE table3
// First get all the rows from table2, paired with matching rows from table1
(SELECT a.idhash, b.username, b.usermail, a.firstseen, a.lastseen
FROM table2 a
LEFT JOIN table1 b
ON b.idhash = a.idhash)
// Now get the remaining rows from table1 that don't have matches
UNION ALL
(SELECT null, a.username, a.usermail, null, null
FROM table1 a
LEFT JOIN table2 b
ON b.idhash = a.idhash
WHERE b.idhash IS NULL)
如果不希望表1中的行在表2中没有对应的行,请删除UNION
子句中的第二个查询。您使用的是什么数据库服务器?为了澄清,您是说表2中的行在表1中没有对应的行?我这样问是因为很多答案都假设相反。您使用的是什么数据库服务器?为了澄清,您是说表2中有一些行在表1中没有对应的行?我这样问是因为很多答案都是相反的,只是在前面加上“INSERT-INTO[table 3]”,然后在前面加上“INSERT-INTO[table 3]”