MySQL Query查找2个表之间的匹配

时间:2015-03-25 00:51:28

标签: 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 ''
);

目标是返回 hashTable.userHash 中来自 TEMP_TBL.compHash 的匹配记录的用户ID。固定表可以有数百万行,临时表最多可以有2000行。

我可以找到如何查找非匹配记录的示例,但没有匹配的记录。我确定它很简单,但我被卡住了。

2 个答案:

答案 0 :(得分:1)

简单的左连接怎么样?

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

答案 1 :(得分:0)

exists是一个非常合理的解决方案:

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