我有構成一個像這樣的表 '接觸':搜索中加入了表的多條記錄
- ID,姓名,等
而且contacts_related
- contact_id,姓氏,姓氏
一個聯繫人可以有多個相關聯繫人(通過contact_id加入)。我想要做的是對聯繫人進行SELECT查詢,如果給出搜索輸入(例如:'John'),它會打印所有名稱中包含John的聯繫人,或者打印名稱中包含與'John'的相關聯繫人的聯繫人。
有關如何做到這一點的任何建議,而不做兩個不同的查詢?
我有構成一個像這樣的表 '接觸':搜索中加入了表的多條記錄
而且contacts_related
一個聯繫人可以有多個相關聯繫人(通過contact_id加入)。我想要做的是對聯繫人進行SELECT查詢,如果給出搜索輸入(例如:'John'),它會打印所有名稱中包含John的聯繫人,或者打印名稱中包含與'John'的相關聯繫人的聯繫人。
有關如何做到這一點的任何建議,而不做兩個不同的查詢?
一個可能的解決方案是
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%'
@Begueradj謝謝! – Barry 2014-11-05 09:37:06
你想要那些約翰本人或約翰關係的聯繫人。查找關係使用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%'
);
試試這個,
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)
根據您的需要選擇列。
下面是你的答案,我已經測試和工作!在接觸表
SELECT c.name
FROM contact T
INNER JOIN contact_r C ON C.Id = T.id
WHERE C.name LIKE '%saif%'
數據
數據contact_r表:
爲什麼你有兩個表都存儲同樣的事(名字,姓氏)? – Strawberry 2014-11-05 09:02:57
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
您可能想重新考慮您的表格設計。我建議有一個表存儲'id','name','surname'和另外兩個'id's(引用知道彼此的人1和人2),然後您可能想要添加另一個字段,例如作爲'關係'。 – Eilidh 2014-11-05 09:09:07