Проблема с составным запросом

maryan.vetrov

Здравствуйте, имею следующую проблему, есть две таблицы, societe и socpeople в первой храниться информация о фирме, а во второй о контакных лицах в этой фирме. Задача такая, запрос проверяет вхождение некоторых введенных символов, в этом примере 0321 , в этих таблицах в указаных полях, и выдает все записи где эти символы встречаются. И все бы хорошо, но он не обрабатывает те фирмы у которых отсутствуют контакные лица, хотя в таблице с фирмами существует запись с номером телефона содержащим введенные цифры. Понятно что это происходит благодаря этой записи WHERE CTC.fk_soc=SOC.rowid которая показывает связь между внешним ключом таблицы с контактами СТС.fk и primary ключом SOC.rowid таблицы с фирмами, ну и соотвественно если контакт для фирмы не был создан то и равенства нет, соответсвенно запись выпадает, даже если в таблице фирм, существует запись с номером телефона подходящим под условие. Как написать запрос так чтобы он обрабатывал первую таблицу и выдавал совпадения даже если контакт для этой фирмы не был создан. Вот пример запроса который работает, но упускает из виду фирмы у которых нет контактов:
SELECT SOC.rowid as SOCid, SOC.nom, SOC.tel, CTC.rowid as CTCid, CTC.name, CTC.firstname, CTC.phone, CTC.phone_perso, 
 CTC.phone_mobile
	 FROM societe SOC, socpeople CTC
	 WHERE CTC.fk_soc=SOC.rowid AND (SOC.nom like "%0321%" OR CTC.name like "%0321%" OR SOC.tel like "%0321%" OR CTC.phone 
 like "%0321%" OR CTC.phone_perso like "%0321%" OR CTC.phone_mobile like "%0321%");
Заранее благодарю за помощь!
6 ответов

maryan.vetrov

maryan.vetrov,LEFT JOIN


maryan.vetrov

Я пробовал, но в этом случае он выдает все записи, условие вхождения указаных цифр в номер не соблюдается вообще.....


maryan.vetrov

maryan.vetrov,плохо пробовал. Покажи запрос с LEFT JOIN.


maryan.vetrov

Вот:
SELECT SOC.rowid as SOCid, SOC.nom, SOC.tel, CTC.rowid as CTCid, CTC.name, CTC.firstname, CTC.phone, 
 CTC.phone_perso, CTC.phone_mobile
 FROM societe SOC LEFT JOIN socpeople CTC
	 ON CTC.fk_soc=SOC.rowid AND SOC.nom like "%0633%" OR CTC.name like "%0633%" OR SOC.tel like "%0633%" OR 
 CTC.phone like "%0633%" OR CTC.phone_perso like "%0633%" OR CTC.phone_mobile like "%0633%";


maryan.vetrov

maryan.vetrov,а это ты круто придумал - перебросить все условия из WHERE в JOIN. Делай так:
...
FROM societe SOC LEFT JOIN socpeople CTC
	 ON CTC.fk_soc=SOC.rowid 
 WHERE SOC.nom like "%0633%" OR CTC.name like "%0633%" OR SOC.tel like "%0633%" OR 
 CTC.phone like "%0633%" OR CTC.phone_perso like "%0633%" OR CTC.phone_mobile like "%0633%";


maryan.vetrov

Благодарю, понял!