Замена вложенного запроса на join в mysql

#mysql #join

#mysql #Присоединиться

Вопрос:

У меня есть запрос mysql, подобный…

 SELECT OrderTransaction.buyer, OrderTransaction.parent_id
FROM  order_transactions as OrderTransaction
INNER JOIN (
    SELECT buyer
    FROM  order_transactions as dy
    left join orders as ebay on ebay.id=dy.parent_id
    where ebay.status='0' and dy.parent_id IN (
        SELECT parent_id
        FROM  order_shipping_details as ds
        left join orders as ebays on ebays.id=ds.parent_id
        where ebays.status='0'  and ebays.combined=0
        GROUP BY ds.Street
        HAVING count(ds.id) > 1
    ) and ebay.combined=0
    group by dy.buyer
) dup ON dup.buyer=OrderTransaction.buyer 
left join orders as ebay on ebay.id=OrderTransaction.parent_id
where ebay.market_type!='shopclue' and ebay.status='0' and ebay.combined=0
  

Мне нужно оптимизировать этот запрос и я хочу удалить внутренний select с помощью joins.
Любая помощь будет оценена. Заранее спасибо.

Комментарии:

1. напишите описание таблиц и расскажите нам, что вы хотите сделать?

2. Если хотите, рассмотрите возможность выполнения этого простого двухэтапного действия: 1. Если вы еще этого не сделали, предоставьте надлежащие DDL (и / или sqlfiddle), чтобы мы могли легче воспроизвести проблему. 2. Если вы еще этого не сделали, предоставьте желаемый набор результатов, соответствующий информации, предоставленной на шаге 1.

Ответ №1:

Попробуйте этот приведенный ниже код, возможно, он работает быстрее, чем тот, который вы используете в настоящее время:

 DROP TEMPORARY TABLE IF EXISTS temp1;
CREATE TEMPORARY TABLE temp1;

SELECT buyer

FROM  order_transactions AS dy

LEFT JOIN orders AS ebay ON ebay.id=dy.parent_id

WHERE ebay.status='0' 
AND dy.parent_id 
IN (
SELECT parent_id
FROM  order_shipping_details AS ds
left join orders AS ebays ON ebays.id=ds.parent_id
where ebays.status='0'  and ebays.combined=0
GROUP BY ds.Street
HAVING count(ds.id) > 1) 
AND ebay.combined= '0'
;

SELECT 

OrderTransaction.buyer, 
OrderTransaction.parent_id

FROM  order_transactions AS OrderTransaction
INNER JOIN temp1 AS tmp ON tmp.buyer = OrderTransaction.buyer
LEFT JOIN orders AS ebay ON ebay.id = OrderTransaction.parent_id

WHERE ebay.market_type! = 'shopclub' AND ebay.status = '0' and ebay.combined = '0'


Please let me know if you have any questions!
  

Комментарии:

1. Спасибо за ваше решение. Я внес некоторые другие изменения в свои запросы и решил свою проблему.

2. Я очень рад, что это помогло! : D

3. Не могли бы вы пометить его как принятый ответ? Я был бы признателен, поскольку я только начал использовать этот сайт, чтобы помогать другим людям. Это побудит меня решать больше проблем. : D