2015-05-15 78 views
0

我有兩個表。加入兩個表,不加任何外鍵和不同的不相關的ID

CompanyNames: 
company_name text (Unique) 
companyname_id bigint 

HomeNickNames: 
home_nickname text (Unique) 
nickname_id bigint 

因此,該行就會像:

CompanyNames 
    ============== 
    company_name || companyname_id 
|:--------------------------------------:| 
    Robert   |  123 
    Mr.Robert  |  123 
    Mr.RobertGrant |  123 



    HomeNiceNames 
    ============== 
    home_nickname || nickname_id 
|:-------------------------------------:| 
    Robert   |  431 
    Robb   |  431 
    DearRobb  |  431 

假設幾乎每個公司名和暱稱可以因爲同一個公司的名字和暱稱來加入。

我需要一個查詢,可以產生以下結果:

 name_id || home_nickname 
|:-----------------------------------:| 
     123  | Robb 
     123  | Robert 
     123  | DearRobb 
+0

Postgres的。但是,任何數據庫都可以。 – Sandy

+0

一旦你找出如何賦予PG人工智能,以便能夠找出「Robb」和「Robert」是同一個名字,那麼聯合本身應該是非常微不足道的,你可以發佈你的查詢 –

+5

... –

回答

2

查找Robert,然後再與該ID的所有缺口:

select 
    c.companyname_id 
    ,n2.home_nickname 
from CompanyNames as c 
join HomeNiceNames as n 
    on c.company_name = n.home_nickname -- match Robert 
join HomeNiceNames as n2 
    on n.nickname_id = n2.nickname_id -- match nickname with same id as Robert 
+1

你的解決方案比我的更好:-) – Alex

1

仍不能確定什麼是你想要的。只是我的猜測:

http://sqlfiddle.com/#!9/a2f0a/2

SELECT t.companyname_id, t2.home_nickname 
FROM (SELECT companyname_id, GROUP_CONCAT(company_name) names 
FROM CompanyNames 
GROUP BY companyname_id) t 
LEFT JOIN HomeNiceNames 
ON FIND_IN_SET(HomeNiceNames.home_nickname, t.names) 
LEFT JOIN HomeNiceNames t2 
ON HomeNiceNames.nickname_id = t2.nickname_id