MySQL查询找到两个表之间的匹配

问题描述:

我想弄清楚如何编写查询来查找两个表之间的匹配记录。一个表是一个临时表,其中记录是从导入创建的,另一个是固定的用户帐户摘要表。MySQL查询找到两个表之间的匹配

固定表

CREATE TABLE `system`.`hashTable` (
    `id` int UNSIGNED NOT NULL AUTO_INCREMENT, 
    `userID` int, 
    `userHash` char(64), 
    PRIMARY KEY (`id`), 
    CONSTRAINT `acctID` FOREIGN KEY (`userID`) 
     REFERENCES `system`.`master_accounts` (`accountID`) 
     ON UPDATE CASCADE ON DELETE CASCADE, 
    UNIQUE `hash` USING BTREE (`userHash`) comment '' 
); 

临时表

CREATE TABLE `system`.`TEMP_TBL` (
    `id` int NOT NULL, 
    `compHash` char(64), 
    PRIMARY KEY (`id`), 
    INDEX `hash` USING BTREE (`compHash`) comment '' 
); 

的目标是从TEMP_TBL.compHashhashTable.userHash返回用户标识的已匹配的记录。固定表可以有数百万行,临时表最多可以有2000行。

我可以找到如何找到非匹配记录,但没有匹配的例子。我相信这很简单,但我被卡住了。

什么简单的左加入?

SELECT id FROM temp_tbl 
LEFT JOIN hashTable 
ON temp_tbl.comphash=hashTable.userhash 
+0

当然,这将是这个简单:)谢谢。 – SeaFuzz 2015-04-02 16:14:50

exists是一个完全合理的解决方案:

select tt.* 
from system.temp_tbl tt 
where exists (select 1 
       from system.hashtable ht 
       where ht.userhash = tt.comphash 
      );