MySQL Запрос Inner Join Inverse? - PullRequest
       65

MySQL Запрос Inner Join Inverse?

0 голосов
/ 23 февраля 2020

Как мы можем показать «инверсию» внутреннего соединения. Например, у меня есть список фактических транзакций клиентов, которые прошли через платежный процессор, в данном случае «Paypal», но они никогда не переходили на вкладку «Назад к продавцу», чтобы мы могли обработать их ИД пользователя и пароль.

Этот скрипт показывает ВСЕХ людей, которые находятся в списке клиентов, и их связанное место в базе данных пользователей:

SELECT
`Transactions List`.`Customer Email`,
users.Email,
`Transactions List`.`Transaction ID`,
users.`Name`,
users.Phone
FROM
`Transactions List`
INNER JOIN users ON `Transactions List`.`Customer Email` = users.Email

Я хочу показать ОБРАТНОЕ из этого. т.е. все люди, которые потеряли свой путь. Они действительно появляются в таблице СПИСОК ТРАНЗАКЦИЙ, но НЕ появляются в таблице ПОЛЬЗОВАТЕЛЕЙ.

У всех есть идеи, как преобразовать этот MYSQL запрос в обратный, чтобы мы могли быстро определить, какие клиенты не получили учетные записи пользователей. ?

Существует существующий пост "Inner join inverse Php MySQL", на который нет ответа, в котором задается аналогичный вопрос. Возможно, человек, задающий вопрос, не был достаточно ясен: Внутреннее обратное соединение Php mysql

Также В чем разница между «INNER JOIN» и «OUTER JOIN»? В чем разница между "INNER JOIN" и "OUTER JOIN"?

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

Ответы [ 2 ]

3 голосов
/ 23 февраля 2020

Я хочу показать [...] всех людей, которые [...] отображаются в таблице СПИСОК СДЕЛОК, но НЕ отображаются в таблице ПОЛЬЗОВАТЕЛЕЙ.

Вы можете использовать not exists:

select t.*
from transactions_list t
where not exists (
    select 1 from users u where t.customer_email = u.email
)

Еще один способ сформулировать это - использовать анти- left join (это больше в духе вашего вопроса, касающегося объединений):

select t.*
from transactions_list t
left join users u on t.customer_email = u.email
where u.email is null

Это означает: попытаться объединить каждую транзакцию с пользователем и отфильтровать те, которые не совпадают.

0 голосов
/ 23 февраля 2020

select t.*
from `Transactions List` t
left join users u on t.`Customer Email` = u.email
where u.email is null

Учитывая приведенный выше синтаксис и имя таблицы в базе данных, как указано выше, это правильный ответ. Спасибо GMB за ответ на вопрос. Для других читателей, имейте в виду, что если в таблицах вашей базы данных есть пробелы в их именах или именах полей, то вы должны использовать scare quotes для идентификации ваших таблиц или имен полей. Это обычно используется при импорте таблиц в MySQL из сторонних инструментов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...