После небольшого исследования я смог найти это .По сути, вы не можете иметь несколько столбцов для подзапроса в условии IN
или NOT IN
в предложении WHERE
.Вот почему ваш запрос в настоящее время терпит неудачу: Ваш подзапрос получает все столбцы из Таблицы 2.
Насколько я понимаю, ваш вопрос, вы хотите выбрать, где результатом будут элементы, которые не существуют вТаблица 2.
Для этого вы можете просто использовать LEFT OUTER JOIN
.В SQL я бы оставил объединение во всех трех столбцах, но похоже, что Hive не поддерживает несколько условий в JOIN
операторах, поэтому вы можете использовать следующую альтернативу:
SELECT T1.ID, T1.name
FROM Table1 T1
LEFT JOIN Table2 T2_1 ON T2_1.ID1 = T1.ID
LEFT JOIN Table2 T2_2 ON T2_2.ID2 = T1.ID
WHERE (T2_1.id IS NULL) AND -- the id of Table2 - T2_1
(T2_2.id IS NULL) -- the id of Table2 - T2_2
Просто добавьте столько LEFT JOIN
и условия в предложении WHERE
, поскольку у вас есть столбцы для проверки.
Вот скрипка с этой концепцией запроса (данные не совпадают, но концепция есть).