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.compHash在hashTable.userHash返回用户标识的已匹配的记录。固定表可以有数百万行,临时表最多可以有2000行。
我可以找到如何找到非匹配记录,但没有匹配的例子。我相信这很简单,但我被卡住了。
答
什么简单的左加入?
SELECT id FROM temp_tbl
LEFT JOIN hashTable
ON temp_tbl.comphash=hashTable.userhash
答
exists
是一个完全合理的解决方案:
select tt.*
from system.temp_tbl tt
where exists (select 1
from system.hashtable ht
where ht.userhash = tt.comphash
);
当然,这将是这个简单:)谢谢。 – SeaFuzz 2015-04-02 16:14:50