Я нашел несколько похожих вопросов на этот вопрос в SO, но ничего, что относится к моей ситуации.
У меня большой набор данных с сотнями миллионов строк в таблице 1, и я ищу наиболее эффективный способвыполнить следующий запрос. Я использую Google BigQuery, но я думаю, что это общий вопрос SQL, применимый к любой СУБД?
Мне нужно назначить владельца для каждой строки в таблице 1. Я хочу присоединиться кследующий приоритет:
1: если item_id совпадает с идентификатором в Таблице 2
2: если ни один item_id не совпадает, попробуйте сопоставить по item_name
3: если ни один item_id или item_name не совпадают, попробуйтесовпадение по item_division
4: если нет совпадений по item_division, вернуть null
Таблица 1 - Точки данных:
| id | item_id | item_name | item_division | units | revenue
|----|---------|-----------|---------------|-------|---------
| 1 | xyz | pen | UK | 10 | 100
| 2 | pqr | cat | US | 15 | 120
| 3 | asd | dog | US | 12 | 105
| 4 | xcv | hat | UK | 11 | 140
| 5 | bnm | cow | UK | 14 | 150
Таблица 2 -Идентификаторы:
| id | type | code | owner |
|----|---------|-----------|-------|
| 1 | id | xyz | bob |
| 2 | name | cat | dave |
| 3 | division| UK | alice |
| 4 | name | pen | erica |
| 5 | id | xcv | fred |
Желаемый результат:
| id | item_id | item_name | item_division | units | revenue | owner |
|----|---------|-----------|---------------|-------|---------|-------|
| 1 | xyz | pen | UK | 10 | 100 | bob | <- id
| 2 | pqr | cat | US | 15 | 120 | dave | <- code
| 3 | asd | dog | US | 12 | 105 | null | <- none
| 4 | xcv | hat | UK | 11 | 140 | fred | <- id
| 5 | bnm | cow | UK | 14 | 150 | alice | <- division
Мои попытки до сих пор включали множественное соединение таблицы на себя, и я боюсь, что она становитсякрайне неэффективно.
Любая помощь очень ценится.