2016-10-03 2 views
0

Запрос:Нужно ли фильтровать внешний запрос в соединении?

SELECT i1.* 
FROM (SELECT store_id, 
       transaction_fid 
     FROM transactions i 
       inner join (SELECT prod_id 
          FROM products 
          WHERE category = '802') p 
         ON i.prod_id = p.prod_id 
     WHERE i.date_id = '10-SEP-16') i1 
     inner join transactions i2 
       ON i1.store_id = i2.store_id 
        AND i1.transaction_fid = i2.transaction_fid 

В приведенном выше запросе, я пытаюсь получить сделки, которые имеют элементы, которые принадлежат к category «802»

Внутренний запрос соответствует каждой строке из transactions где prod_id является prod_id из пункта в category 802.

внешний запрос затем принимает store_id и transaction_fid и присоединяется к ним обратно к столу сделки, чтобы получить все другие детали в согласованном сделки.

Мой вопрос: мне нужно отфильтровать внешний запрос в том же диапазоне дат, что и внутренний запрос, или это не имеет значения с точки зрения эффективности/времени выполнения запроса?

Есть ли лучший способ достичь того, что я пытаюсь сделать?

+0

Я считаю, что есть лучший способ сделать это - я думаю, что вы слишком сложны - почему бы просто не объединить транзакции с элементом item_id, а затем ограничить категорию до 802 - если вам нужен только магазин транзакций вы можете использовать различные, чтобы убедиться, что вы не получите все транзакции, хотя - я не могу полностью убедиться, не видя, что ваша таблица настроена - обычно, когда вы создаете такую ​​вещь, у вас есть таблица заказов - и таблица товаров и таблица перекрестного соединения order_items – MageeWorld

+0

Я хочу, чтобы все остальное в транзакции было куплено определенное изделие, поэтому я могу узнать, есть ли какие-либо корреляции между купленным предметом и другими предметами, купленными с ним. , если я только что присоединился транзакции к элементам для категории 802 i будут получать только записи для элементов, которые являются i n категория. Я хочу все, что было куплено с этим предметом. – 5SK5

+0

Есть более простой способ написать ваш подзапрос, даже тогда - снова - без ясности вы DDL, я не могу быть уверен – MageeWorld

ответ

2

на основе ваших имен таблиц и присоединиться типы запрос должен что-то вроде:

select i1.store_id,i1.transaction_fid 
from transactions i1 
inner join products p 
on i1.prod_id = p.prod_id 
where p.category = '802' 
and i1.date_id = '10-SEP-16' 
0

Простой, как это?

SELECT tr.* 
FROM transactions AS tr 
INNER JOIN products AS p ON p.prod_id=tr.prod_id 
WHERE i.date_id = {d'2016-09-10'} 
    AND pr.category='802' --really string value? If int-value better as naked number 

Btw: Вы действительно должны избегать даты/времени значение, как культура в зависимости строковых литералов!

Смежные вопросы