2014-11-05 17 views
1

我有構成一個像這樣的表 '接觸':搜索中加入了表的多條記錄

  • ID,姓名,等

而且contacts_related

  • contact_id,姓氏,姓氏

一個聯繫人可以有多個相關聯繫人(通過contact_id加入)。我想要做的是對聯繫人進行SELECT查詢,如果給出搜索輸入(例如:'John'),它會打印所有名稱中包含John的聯繫人,或者打印名稱中包含與'John'的相關聯繫人的聯繫人。

有關如何做到這一點的任何建議,而不做兩個不同的查詢?

+0

爲什麼你有兩個表都存儲同樣的事(名字,姓氏)? – Strawberry 2014-11-05 09:02:57

+0

SELECT * FROM contact a LEFT JOIN related_contacts b ON a.id = b.contact_id HAVING a.name ='JOHN'或b.name ='JOHN' – 2014-11-05 09:05:26

+1

您可能想重新考慮您的表格設計。我建議有一個表存儲'id','name','surname'和另外兩個'id's(引用知道彼此的人1和人2),然後您可能想要添加另一個字段,例如作爲'關係'。 – Eilidh 2014-11-05 09:09:07

回答

1

一個可能的解決方案是

SELECT 
    DISTINCT C.* 
FROM 
    contacts C LEFT JOIN contacts_related R 
    ON C.id=R.contact_id 
WHERE 
    C.name LIKE '%John%' OR 
    R.name LIKE '%John%' 
+0

@Begueradj謝謝! – Barry 2014-11-05 09:37:06

0

你想要那些約翰本人或約翰關係的聯繫人。查找關係使用EXISTS或IN。

select * 
from contacts 
where name like '%John%' 
or exists 
(
    select * 
    from contacts_related 
    where name like '%John%' 
    and contact_id = contacts.id 
); 

或者:

select * 
from contacts 
where name like '%John%' 
or id in 
(
    select contact_id 
    from contacts_related 
    where name like '%John%' 
); 
0

試試這個,

select a.id,a.name,a.surname from 
contacts a join contacts_related b 
on SOUNDEX(a.name)=SOUNDEX(a.name) 

select a.id,a.name,a.surname from 
contacts a, contacts_related b 
where SOUNDEX(a.name)=SOUNDEX(b.name) 

根據您的需要選擇列。

0

下面是你的答案,我已經測試和工作!在接觸表

SELECT c.name 
FROM contact T 
    INNER JOIN contact_r C ON C.Id = T.id 
WHERE C.name LIKE '%saif%' 

數據 enter image description here

數據contact_r表: enter image description here