0
我有兩個表「客戶」和「CustomerCommuncation」具有字段:MySQL查詢優化
**Customer**
---------------------------------------------
|ID | FirstName | LastName |
| 1 | John | Menon |
| 2 | george | cool |
| 3 | John | Menon |
| 4 | george | cool |
| 5 | John | Menon |
**CustomerCommunication**
---------------------------------------------------------
|ID | CommValue | CustomerID |
| 1 | [email protected] | 1 |
| 2 | [email protected] | 1 |
| 3 | 9000000000 | 1 |
| 4 | [email protected] | 1 |
| 5 | [email protected] | 2 |
| 6 | [email protected] | 2 |
| 8 | 9000000000 | 3 |
| 9 | [email protected] | 3 |
| 10 | 9000000000 | 5 |
| 11 | [email protected] | 4 |
這兩個表可以被統稱爲: 約翰·梅農已經可以聯繫:ABC @ gmail.com,ABCD @ gmail.com,ABCDE @ gmail.com 9000000000.
兩個客戶是相似時,他們的名字,姓氏和CommValue的ATLEAST一個是 similar.Clearly customerIDs 1,3和5是類似,因爲他們有相同的名字,姓氏 和份額s PhoneNumber 9000000000.
Question: 給定一個客戶ID到一個組的列表。我們必須找到類似於本集團客戶的 的CustomerID聯盟。
例如,如果我們給出一個組(1,2)比的結果將是(3,4,5)
我已經寫存儲過程,如:
CREATE DEFINER= FUNCTION `stroredfunc`(custlist varchar(1000)) RETURNS varchar(10000)
{
begin
declare v_commvalue varchar(10000) default '';
declare v_LastName varchar(1000) default '';
declare v_firstname varchar(1000) default '';
declare v_result varchar(10000) default '';
select group_concat(Distinct c.FirstName SEPARATOR ',') as v_firstname,
group_concat(Distinct c.LastName SEPARATOR ',') as v_LastName,
group_concat(Distinct cc.CommValue SEPARATOR ',') as v_commvalue
from Customer as c inner join CustomerCommunication as cc
on cc.CustomerID=c.ID where FIND_INSET(c.ID,custlist);
select group_concat(distinct cc.CustomerID) into v_result from Customer as c inner join
CustomerCommunication as cc
on cc.CustomerID=c.ID where FIND_IN_SET(c.FirstName,v_firstname) and
FIND_IN_SET(c.LastName,v_LastName) and
FIND_IN_SET(cc.CommunicationValue,v_commvalue)
;
return v_result;
end
}
有沒有其他優化的方法可以做到這一點
非常感謝你。只是一點點的變化,而不是「a.Id = d.CustomerID」它必須是「b.Id = d.CustomerID」 – satishsingh2230