MYSQL добавление предложения OR в левом соединении, замедляющее запрос - PullRequest
0 голосов
/ 19 июня 2020

У меня есть две таблицы базы данных: заказы и клиенты .

Я использую SQL, чтобы получить все заказы в июне месяце.

Если адреса электронной почты Ship To и Bill To различаются, мы вставляем две разные записи с обоими электронными письмами для клиентов table.

select o.order_id
     , o.total
     , c.customer_email 
  from orders o 
  left 
  join customers c
    ON o.bill_email = c.customer_email
    OR o.ship_email = c.customer_email
 where DATE(o.order_date) >= '2020-06-01'

Но этот SQL загружается слишком долго из-за условия,

ON o.bill_email=c.customer_email 
OR o.ship_email=c.customer_email

Как я могу добавить оба условия в предложение ON?

Любое помощь будет оценена.

1 Ответ

0 голосов
/ 19 июня 2020

Используйте два left join s и помещайте результаты в отдельные столбцы, а не в строки:

select o.order_id, o.total, cb.customer_email, so.customer_email
from orders o left join
     customers cb
     on o.bill_email = cb.customer_email left join
     customers cs
     o.ship_email = cs.customer_email
where o.order_date >= '2020-06-01';

Обратите внимание, что функция date() не требуется.

Тем не менее, это кажется, более легко выражается как:

select o.order_id, o.total, o.bill_email
from orders o 
where o.order_date >= '2020-06-01'
union all
select o.order_id, o.total, o.ship_email
from orders o 
where o.order_date >= '2020-06-01' and s.ship_email <> o.bill_email;
...