在连接表中搜索多个记录

时间:2014-11-05 08:59:02

标签: mysql sql join

我有一个表'contacts',其结构如下:

  • id,姓名,姓氏等

和contacts_related

  • contact_id,姓名,姓氏

一个联系人可以拥有多个相关联系人(通过contact_id加入)。我想做的是对联系人进行SELECT查询,如果给出了搜索输入(例如:'John'),它会打印名称中包含John的所有联系人或者名称中包含“John”的联系人的联系人

有关如何执行此操作的任何建议,而不进行两次不同的查询?

4 个答案:

答案 0 :(得分: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%'

答案 1 :(得分:0)

您希望这些联系人自己是Johns,或者是John关系。要查找关系,请使用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%'
);

答案 2 :(得分: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) 

根据您的需要选择列。

答案 3 :(得分: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