select tb1.A,tb1.B,tb2.C,tb2.D,tb2.E from tb2 left join tb1 on tb2.A=tb1.A 把结果保存到表中就是你需要的表了.
在MySQL中下列语句还不能工作: SELECT * FROM table1 WHERE id IN (SELECT id FROM table2); SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);然而,在很多情况下,你可以重写查询,而不用子选择: SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id; SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL对于更复杂的子查询,通常你可以创建临时的表保存子查询。然而在一些情况下,这种选择将行不通。最经常遇到的情形是DELETE语句,对于它标准SQL不支持联结(join)(除了在子选择)。对于这种情况,有2个可用选择,直到子选择被MySQL支持。 第一个选择是使用一种过程化的程序语言(例如Perl或PHP)来提交一个SELECT查询获得要被删除记录主键,并然后使用这些值构造DELETE语句(DELETE FROM ... WHERE ... IN (key1, key2, ...))。 第二个选择是使用交互式SQL自动构造一套DELETE语句,使用MySQL扩展CONCAT()(代替标准||操作符)。例如: SELECT CONCAT('DELETE FROM tab1 WHERE pkid = ', tab1.pkid, ';') FROM tab1, tab2 WHERE tab1.col1 = tab2.col2;你可以把这个查询放在一个脚本文件并且从它重定向输入到mysql命令行解释器,将其输出作为管道返回给解释器的第2个实例: prompt> mysql --skip-column-names mydb < myscript.sql | mysql mydbMySQL仅支持INSERT ... SELECT ...和REPLACE ... SELECT ...,独立的子选择将可能在3.24.0得到,然而,在其他环境下,你现在可以使用函数IN()。 5.4.2 SELECT INTO TABLE MySQL还不支持Oracle SQL的扩展:SELECT ... INTO TABLE ....,相反MySQL支持ANSI SQL句法INSERT INTO ... SELECT ...,基本上他们是一样的。另外,你可使用SELECT INTO OUTFILE...或CREATE TABLE ... SELECT解决你的问题。
在tb1中设置A为Primary Key,然后用: REPLACE INTO tb1 (A, B, C, D, E) SELECT A, '', C, D, E FROM tbl2就可以了。REPLACE INTO 在遇到Duplicate Key的时候,会自动替换为新的纪录。
现在的mysql 4.1已经支持子查询了:)
insert into tb1 select * from tb2 where tb1.A=tb2.A
楼上的兄弟说可以用子查询了,那就用子查询吧 update tb1 set tb1.c=tb2.c set tb1.d=tb2.d set tb1.e=tb2.e from tb1,tb2 where tb1.a=ta2.a insert into tb1(a,c,d,e) select * from tb2 where tb2.a not in(select a from tb1)
把结果保存到表中就是你需要的表了.
SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);然而,在很多情况下,你可以重写查询,而不用子选择: SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL对于更复杂的子查询,通常你可以创建临时的表保存子查询。然而在一些情况下,这种选择将行不通。最经常遇到的情形是DELETE语句,对于它标准SQL不支持联结(join)(除了在子选择)。对于这种情况,有2个可用选择,直到子选择被MySQL支持。 第一个选择是使用一种过程化的程序语言(例如Perl或PHP)来提交一个SELECT查询获得要被删除记录主键,并然后使用这些值构造DELETE语句(DELETE FROM ... WHERE ... IN (key1, key2, ...))。 第二个选择是使用交互式SQL自动构造一套DELETE语句,使用MySQL扩展CONCAT()(代替标准||操作符)。例如: SELECT CONCAT('DELETE FROM tab1 WHERE pkid = ', tab1.pkid, ';')
FROM tab1, tab2
WHERE tab1.col1 = tab2.col2;你可以把这个查询放在一个脚本文件并且从它重定向输入到mysql命令行解释器,将其输出作为管道返回给解释器的第2个实例: prompt> mysql --skip-column-names mydb < myscript.sql | mysql mydbMySQL仅支持INSERT ... SELECT ...和REPLACE ... SELECT ...,独立的子选择将可能在3.24.0得到,然而,在其他环境下,你现在可以使用函数IN()。 5.4.2 SELECT INTO TABLE
MySQL还不支持Oracle SQL的扩展:SELECT ... INTO TABLE ....,相反MySQL支持ANSI SQL句法INSERT INTO ... SELECT ...,基本上他们是一样的。另外,你可使用SELECT INTO OUTFILE...或CREATE TABLE ... SELECT解决你的问题。
REPLACE INTO tb1 (A, B, C, D, E) SELECT A, '', C, D, E FROM tbl2就可以了。REPLACE INTO 在遇到Duplicate Key的时候,会自动替换为新的纪录。
update tb1
set tb1.c=tb2.c
set tb1.d=tb2.d
set tb1.e=tb2.e
from tb1,tb2
where tb1.a=ta2.a
insert into tb1(a,c,d,e)
select * from tb2
where tb2.a not in(select a from tb1)