我有一个表'contacts',其结构如下:
和contacts_related
一个联系人可以拥有多个相关联系人(通过contact_id加入)。我想做的是对联系人进行SELECT查询,如果给出了搜索输入(例如:'John'),它会打印名称中包含John的所有联系人或者名称中包含“John”的联系人的联系人
有关如何执行此操作的任何建议,而不进行两次不同的查询?
答案 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%'
联系表中的数据
<_> contact_r表中的数据: