2016-04-21 76 views
0

或OR我有一個表TableA[AccountID, Email]。我有另一張表TableB[AccountID_1, AccountID_2, email]。我需要將TableA中的AccountIDAccountIDs中的TableB中的任一個匹配。這兩種方法似乎都不起作用。第一個似乎是停滯不前或只是永遠(這兩個表有幾十萬條)。第二個有錯誤"Can't reopen table: TableB".MySQL的聯盟與加入條款

試圖加入或

select count(distinct TableA.id) from TableA 
    JOIN TableB ON TableB.AccountID = TableA.AccountID_1 
    OR TableB.AccountID = TableA.AccountID_2 
; 

嘗試SQL UNION

select count(distinct b.id) from (
    select * from TableA 
    join TableB on TableB.AccountID = TableA.AccountID_1 
    union 
    select * from TableA 
    join TableB on TableB.AccountID = TableA.AccountID_2 
) as b; 
+0

在你忘了說,工會試圖 '上TableB.AccountID加入表B ...' 的第二次,這就是爲什麼它給你一個錯誤。 –

+0

對不起,這只是一個錯誤,把我的查詢進入SO。我糾正了它。 – Asif

+0

所有3個'AccountID' *列都有索引嗎?你是否在'join'查詢上運行'explain'來查看哪些索引正在使用或未被使用? –

回答

0

你可以嘗試

select count(*) from TableA where 
exists (select 1 from TableB where 
AccountID in (AccountID_1,AccountID_2)) 
0

這是第一個,列名被選擇是錯誤的。以下似乎工作正常。

試圖加入或:

select count(distinct `TableA`.AccountID) from `TableA` 
    JOIN TableB ON (TableA.AccountID = TableB.AccountID_1 
     OR TableA.AccountID = TableB.AccountID_2); 

嘗試SQL UNION

select count(distinct b.AccountID) from (
    select `AccountID` from TableA 
    join TableB on TableA.AccountID = TableB.AccountID_1 
    union 
    select `AccountID` from TableA 
    join TableB on TableA.AccountID = TableB.AccountID_2 
) as b;