我试图找出如何编写查询以查找两个表之间的匹配记录。一个表是临时表,其中包含从导入创建的记录,另一个表是用户帐户摘要的固定表。
固定表格:
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行。
我可以找到如何查找非匹配记录的示例,但没有匹配的记录。我确定它很简单,但我被卡住了。
答案 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
);