MYSQL: возвращать ТОЛЬКО совпадения с двумя таблицами без конфликтов - PullRequest
1 голос
/ 23 апреля 2020

Я хочу знать, возможно ли это сделать только с одним запросом.

Вы видите, у меня есть эта таблица user_leads , и мне нужно объединить эту таблицу с двумя таблицами: lead_forms AND user_services в столбцах formid и serviceid соответственно.

Результат этого запроса должен возвращать ТОЛЬКО строки, которые соответствуют в user_services ИЛИ lead_forms. НЕ возвращает строки без совпадения хотя бы на одном из этих двух.

Из-за природы этих двух столбцов могут быть установлены оба, и иногда один будет установлен, а другой NULL. И часто не будет совпадений ни с одной из двух таблиц.

Так что проблема в том, что если я сделаю внутреннее объединение, подобное этому

FROM `user_leads`
INNER JOIN lead_forms ON lead_forms.formid = user_leads.formid

, но затем сделаю

INNER JOIN user_services ON user_services.serviceid = user_leads.serviceid

возвращает все совпадения с lead_forms и игнорирует некоторые совпадения с user_services , когда должно возвращать их оба. Если я сделаю следующее, хотя

FROM `user_leads`
WHERE user_leads.formid > 0 OR user_leads.serviceid > 0
LEFT OUTER JOIN user_services ON user_leads.serviceid = user_services.serviceid
LEFT OUTER JOIN lead_forms ON user_leads.serviceid = lead_forms.formid

Он возвращает все совпадения из двух таблиц точно так же, как я хотел, но, поскольку это LEFT OUTER JOIN, он также возвращает строки из user_leads , которые имеют нет совпадений в user_services или lead_forms , что приводит к ошибкам.

Я не хочу проверять совпадения, если на самом деле нет другого способа сделать это с MYSQL. Поэтому, если вы знаете правильный способ сделать это, ваша помощь приветствуется.

РЕДАКТИРОВАТЬ: Для справки https://www.db-fiddle.com/f/pvjnJSAb913EX5Qc7c2QWo/1

Это то, что сработало https://www.db-fiddle.com/f/5tgwy9AgBHx2dcqt9NoThN/2

1 Ответ

2 голосов
/ 23 апреля 2020

Объединения LEFT будут делать то, что вы хотите, если вы добавите условие, чтобы хотя бы один из соединенных столбцов не был нулевым:

LEFT OUTER JOIN user_services ON user_leads.serviceid = user_services.serviceid
LEFT OUTER JOIN lead_forms ON user_leads.serviceid = lead_forms.formid
WHERE user_services.serviceid IS NOT NULL OR lead_forms.formid IS NOT NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...