2015-03-25 106 views
0

我想弄清楚如何編寫查詢來查找兩個表之間的匹配記錄。一個表是一個臨時表,其中記錄是從導入創建的,另一個是固定的用戶帳戶摘要表。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行。

我可以找到如何找到非匹配記錄,但沒有匹配的例子。我相信這很簡單,但我被卡住了。

回答

1

什麼簡單的左加入?

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

當然,這將是這個簡單:)謝謝。 – SeaFuzz 2015-04-02 16:14:50

0

exists是一個完全合理的解決方案:

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