Соединения

Использование таблицы несколько раз

Если одну и ту же таблицу необходимо использовать в запросе несколько раз, то необходимо воспользоваться псевдонимами для таблиц. Например, для каждой стоимости товара в магазине найдем предложение на такой же товар в другом магазине по меньшей цене:

SELECT pp.product_id,
       pp.store_id,
       pp.price,
       ppl.store_id AS store_id_less,
       ppl.price AS price_less
  FROM product_price pp
  JOIN product_price ppl
    ON ppl.product_id = pp.product_id
   AND ppl.store_id != pp.store_id
   AND ppl.price < pp.price
 ORDER BY pp.product_id,
          pp.store_id,
          ppl.store_id,
          ppl.price
product_idstore_idpricestore_id_lessprice_less
130112500.0030010500.00
130112500.0080012000.00
180012000.0030010500.00
260027500.0050026100.00
320122900.0050022000.00
320122900.0080022100.00
380022100.0050022000.00

Разберемся, как это работает:

  1. Берутся все строки из таблицы product_price. Дальнейшее обращение к этому набору строк происходит через pp.
  2. Для каждой строки из пункта 1 просматривается еще раз все строки таблицы product_price. Обращение к строкам последней происходит через ppl.
  3. Если цена price у строки из второй копии product_price меньше, чем у строки из первой копии product_price, то связка этих строк добавляется в результат выполнения запроса.
  4. В конце результат сортируется согласно ORDER BY.
ПредыдущаяСледующая