SQL для выбора следующего доступного кода из таблицы

Я хотел бы выбрать доступный PROMO_CODE (таблица B) для записей CUST_ID (таблица A), у которых их нет. Я думаю, что у меня есть базовый SQL для каждой таблицы, но я не уверен, как объединить их для вывода.

----- Таблица A -----

CUST_ID|CREATED_DATE|MY_CODE
XYZ111|1/1/2015|5
XYZ222|1/1/2015|6
XYZ333|7/12/2018|   
XYZ444|7/13/2018|   
XYZ555|7/14/2018|   
XYZ666|2/2/2012|3
XYZ777|2/2/2012|2
XYZ888|7/15/2018|   
XYZ999|6/6/2016|4
XYZ1110|6/6/2016|1

----- Таблица B -----

PROMO_CODE|PROMO_CODE_STATUS
1|assigned
2|used
3|
4|used
5|assigned
6|
7|
8|assigned
9|assigned
10|

---- Желаемый вывод -----

CUST_ID|MY_NEW_CODE
XYZ333|3
XYZ444|6
XYZ555|7
XYZ888|10

---- то, что я до сих пор, но не связано -----

Select a.CUST_ID, b.PROMO_CODE as MY_NEW_CODE  

(Select a.CUST_ID, a.CREATED_DATE, a.MY_CODE
from $A$ a where 
a.MY_CODE is NULL AND trunc(a.CREATED_DATE) >= trunc(sysdate -1))

(Select b.PROMO_CODE, b.PROMO_CODE_STATUS
from $B$ b where 
b.PROMO_CODE_STATUS is NULL)

2 ответа

Я бы подумал примерно так:

Select a.CUST_ID, b.PROMO_CODE as MY_NEW_CODE  
FROM $A$ a, $B$ b
WHERE a.MY_CODE = b.PROMO_CODE 
AND trunc(a.CREATED_DATE) >= trunc(sysdate -1)
AND b.PROMO_CODE_STATUS is NULL

Я использовал ROW_NUMBER () для каждой таблицы, и это работает:

SELECT * FROM (SELECT ROW_NUMBER () OVER (ORDER BY.CUST_ID ASC) AS Row_CUST_ID, a.CUST_ID, a.MY_NEW_CODE FROM $A$ a, где a.MY_NEW_CODE равен NULL, и усечение (a.LOADED_DATE>) -1)) c ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ROW_NUMBER () ПЕРЕВЕРНУТЬСЯ (ЗАКАЗАТЬ ПО b.PROMO_CODE ASC) КАК Row_PROMO_CODE, b.PROMO_CODE, b.PROMO_CODE_STATUS ОТ $B$ b, где b.PROMO_CODE_STATUS = PU = PU = NU.Row_PROMO_CODE


Это дает ожидаемый результат:

ROW_CUST_ID | CUST_ID | MY_NEW_CODE | ROW_PROMO_CODE | PROMO_CODE | PROMO_CODE_STATUS

1 | 111 | | 1 | BBB |
2 | 222 | | 2 | DDD |
3 | 333 | | 3 | FFF |

Из обновленных таблиц:

----- таблица А

CUST_ID | MY_NEW_CODE | LOADED_DATE

111 | | 2018-07-18 00: 00: 00.0
222 | | 2018-07-18 00: 00: 00.0
333 | | 2018-07-19 00: 00: 00.0
444 | | 2018-07-12 00: 00: 00.0

----- таблица B

PROMO_CODE | PROMO_CODE_STATUS

AAA | используемый
BBB |
CCC | назначенный
DDD |
EEE | назначенный
FFF |

Другие вопросы по тегам