2014-11-05 4 views
1

У меня есть таблица 'контакты', которые структурированы следующим образом:Поиск в присоединяемой таблицы с несколькими записями

  • идентификатор, имя, фамилия и т.д.

И contacts_related

  • contact_id, имя, фамилия

Один контакт может иметь много (включая контакт_ид). То, что я хотел бы сделать, это сделать запрос SELECT на контактах, если задан ввод поиска (например, «Джон»), он печатает все контакты, у которых есть Джон по имени ИЛИ контакты, имеющие связанный контакт с «Джоном» в названии ,

Любые предложения о том, как это сделать, без двух разных запросов?

+0

Почему у вас есть две таблицы, как хранить такую ​​же вещь (имя, фамилия)? – Strawberry

+0

SELECT * FROM связаться с LEFT JOIN related_contacts b ON a.id = b.contact_id HAVING a.name = 'JOHN' ИЛИ ​​b.name = 'JOHN' –

+1

Возможно, вам захочется пересмотреть дизайн вашей таблицы. Я бы предложил иметь одну таблицу, хранящую «id», «name», «surname» и другую с двумя «id's» (для ссылки на человека 1 и человека 2, которые знают друг друга), тогда вы можете захотеть добавить другое поле, такое как как «отношения». – Eilidh

ответ

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 Thanx! – Barry

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

Смежные вопросы