2013-12-23 47 views
0

不匹配該表1結構創建從現有的兩個表的表是:通過使索引列和值在這兩個表

CREATE TABLE `table1` (
    `table_id` int(11) NOT NULL auto_increment, 
    `firstname` varchar(25) default NULL, 
    `column2` varchar(32) default NULL, 
    `column3` varchar(25) default NULL, 
    `column4` varchar(25) default NULL, 
    `column5` varchar(56) default NULL, 
    `column6` varchar(25) default NULL, 
    `column7` varchar(36) default NULL, 
    `column8` varchar(25) default NULL, 
    `column9` varchar(40) default NULL, 
    `column10` varchar(86) default NULL, 
    `column11` varchar(113) default NULL, 
    `column12` varchar(50) default NULL, 
    `column13` varchar(50) default NULL, 
    `column14` varchar(25) default NULL, 
    `column15` varchar(25) default NULL, 
    `column16` varchar(25) default NULL, 
    `column17` varchar(25) default NULL, 
    `column18` varchar(25) default NULL, 
     PRIMARY KEY (`table_id`), 
     KEY `firstname` (`firstname`), 
) ENGINE=MyISAM AUTO_INCREMENT=13982 DEFAULT CHARSET=utf8; 

CREATE TABLE `table2` (
    `table_id` int(11) NOT NULL auto_increment, 
    `firstname` varchar(25) default NULL, 
    `column2` varchar(32) default NULL, 
    `column3` varchar(25) default NULL, 
    `column4` varchar(25) default NULL, 
    `column5` varchar(56) default NULL, 
    `column6` varchar(25) default NULL, 
    `column7` varchar(36) default NULL, 
    `column8` varchar(25) default NULL, 
    `column9` varchar(40) default NULL, 
    `column10` varchar(86) default NULL, 
    `column11` varchar(113) default NULL, 
    `column12` varchar(50) default NULL, 
    `column13` varchar(50) default NULL, 
    `column14` varchar(25) default NULL, 
    `column15` varchar(25) default NULL, 
    `column16` varchar(25) default NULL, 
    `column17` varchar(25) default NULL, 
    `column18` varchar(25) default NULL, 
     PRIMARY KEY (`table_id`), 
     KEY `firstname` (`firstname`), 
) ENGINE=MyISAM AUTO_INCREMENT=13982 DEFAULT CHARSET=utf8; 

在此之後下面查詢執行此及其給予超時在碼已過期。

CREATE TABLE new_tablematch 
    select table_id, firstname 
     from table1 
      where firstname NOT in (select a.firstname 
            from table1 as a , table2 as b 
            where a.firstname= b.firstname); 
+0

你說「超時在代碼中......」什麼代碼?如果你直接在mysql中運行查詢會發生什麼? –

+1

[**這裏工作得很好。**](http://www.sqlfiddle.com/#!2/56632a/1)請注意,在'CREATE TABLE'語句中有一個小的錯字'extra', '在最後一列定義中。 –

回答

1

嘗試此查詢:

CREATE TABLE new_tablematch 
SELECT table1.table_id, table1.firstname 
FROM table1 LEFT JOIN table2 ON table1.firstname = table2.firstname 
WHERE table2.firstname IS NULL; 

它應該有比你的查詢性能更好(你是指表1兩次,子查詢可能會爲表1中的每一行執行)。

+0

如果表格很大,則可能有助於將索引放在名字列上 –

0

與您的查詢問題是,你提到table1兩次。它不需要在子查詢:

CREATE TABLE new_tablematch 
    select table_id, firstname 
    from table1 
    where firstname NOT in (select b.firstname 
          from table2 as b 
          ); 

然而,join版本中的其他答案可能表現得更好。

相關問題