Я хочу получить все строки в таблице, где один столбец соответствует отношению со значением столбца в строке в другой таблице, которая имеет такое же значение другого столбца.
Конкретно, у меня естьдве таблицы, заказы и product_info, к которым я обращаюсь через Amazon Redshift
Заказы
| ID | Date | Amount | Region |
=====================================
| 1 | 2019/4/1 | $120 | A |
| 1 | 2019/4/4 | $100 | A |
| 2 | 2019/4/2 | $50 | A |
| 3 | 2019/4/6 | $70 | B |
Ключи разделов заказа - это регион и дата.
Информация о продукте
| ID | Release Date | Region |
| ---- | ------------ | ------ |
| 1 | 2019/4/2 | A |
| 2 | 2019/4/3 | A |
| 3 | 2019/4/5 | B |
Первичным ключом информации о продукте является id, а ключом раздела является регион.
Я хочу получить все строки из заказов в регионе A, где дата строки больше, чем датазначение даты выпуска в информации о продукте для этого идентификатора.
Так что в этом случае он должен вернуть только одну строку,
| 1 | 2019/4/4 | $100 | A |
Я пытался сделать
select *
from orders
INNER JOIN product_info ON orders.date>product_info.release_date
AND orders.id=product_info.id
AND orders.region=A
AND product_info.region=A
limit 10
Проблемаявляется то, что этот запрос был абсурдно медленным (отменил его через 10 минут).Таблицы очень большие, и у меня есть ощущение, что он сканировал всю таблицу, не ограничивая ее сначала областью (на самом деле у меня есть другие фильтры, помимо области, которые я хочу применить к списку идентификаторов, прежде чем выполнять внутреннее соединение, но я ограничил его только регионом ради упрощения вопроса).
Как эффективно написать запрос такого типа?