В Apache Hive У меня есть таблицы, которые я хотел бы оставить слева, сохраняя все данные из левых данных и добавляя данные по возможности из правой таблицы. Для этого я использую два объединения, потому что соединение основано на двух полях (material_id и location_id). Это прекрасно работает с двумя традиционными слева присоединяется:Hive/SQL - Left join with fallback
SELECT
a.*,
b.*
FROM a
INNER JOIN (some more complex select) b
ON a.material_id=b.material_id
AND a.location_id=b.location_id;
Для LOCATION_ID база данных содержит только два различных значения, скажем 1 и 2.
Теперь у нас есть требование, что если нет " идеальное совпадение ", это означает, что только соединение material_id может быть объединено, и нет правильной комбинации material_id и location_id (например, material_id = 100 и location_id = 1) для соединения для location_id в b-таблице, соединение должно" по умолчанию "или" возврат "к другому возможному значению location_id, например material_id = 001 и location_id = 2 и наоборот. Это должно быть только для location_id.
Мы уже рассмотрели все возможные ответы и с CASE и т. Д., Но не превалировали. Установка, подобная
...
ON a.material_id=b.material_id AND a.location_id=
CASE WHEN a.location_id = b.location_id THEN b.location_id ELSE ...;
Мы попытались или не смогли понять, как реально работать в языке запросов на улей.
Благодарим за помощь! Может быть, у кого-то есть умная идея.
Вот некоторые примерные данные:
Table a
| material_id | location_id | other_column_a |
| 100 | 1 | 45 |
| 101 | 1 | 45 |
| 103 | 1 | 45 |
| 103 | 2 | 45 |
Table b
| material_id | location_id | other_column_b |
| 100 | 1 | 66 |
| 102 | 1 | 76 |
| 103 | 2 | 88 |
Left - Join Table
| material_id | location_id | other_column_a | other_column_b
| 100 | 1 | 45 | 66
| 101 | 1 | 45 | NULL (mat. not in b)
| 103 | 1 | 45 | DEFAULT TO where location_id=2 (88)
| 103 | 2 | 45 | 88
PS: Как указано here существует и т.д. не работает в ON суб-запроса.
Похоже, вам нужно будет показать нам некоторые образцы данных. – Andrew
Спасибо, Андрей, я добавил некоторые примеры данных для ясности. – alpcoder