#if-statement #case #impala
#оператор if #случай #impala
Вопрос:
У меня есть условная логика в JAVA, которая имеет дело с базами данных, и я хотел преобразовать ее в Impala. Я запутался между использованием функций «CASE WHEN» и «IF» в impala, так какую из приведенных ниже логик impala лучше использовать? и правильно ли это?
что происходит логически, так это то, что я пытаюсь извлечь столбец (seller_id) из первой таблицы (table_seller_inside), если главное условие истинно. А затем проверьте, имеет ли значение seller_id значение null, тогда я буду извлекать данные из другой таблицы (table_seller_outside)
Логика JAVA:
if(temp_table.col_1!=null amp;amp; !temp_table.col_2.trim().equals("") )
{
-> table_seller_inside.seller_id
if(seller_id==null)
{
-> table_seller_outside.seller_id
}
}
Логика Impala со случаем, КОГДА:
SELECT CASE WHEN temp_table.col_1 IS NOT NULL THEN
sel_in.seller_id as seller_id,
sel_in.seller_name as seller_name,
sel_in.seller_number as seller_num
CASE WHEN (seller_id IS NULL) THEN
sel_out.seller_id as seller_id,
sel_out.seller_name as seller_name,
sel_out.seller_number as seller_num,
END
END
FROM table_seller_inside sel_in,
table_seller_outside sel_out
Логика Impala с IF:
if(логическое условие, введите ifTrue, введите ifFalseOrNull)
SELECT if(temp_table.col_1 !="NULL", (sel_in.seller_id as seller_id,
sel_in.seller_name as seller_name,
sel_in.seller_number as seller_num),
if(seller_id ="NULL", (sel_out.seller_id as seller_id,
sel_out.seller_name as seller_name,
sel_out.seller_number as seller_num)
FROM table_seller_inside sel_in,
table_seller_outside sel_out
Ответ №1:
Вы можете использовать приведенный ниже sql. Необходимо указать соединения или отношения между всеми связанными таблицами. Отдельный случай, когда здесь будет работать. JAVA-код использует if-else , поэтому вы можете использовать wither case when или if() .
SELECT CASE
WHEN temp_table.col_1 IS NOT NULL
AND TRIM(temp_table.col_2)<>'' THEN sel_in.seller_id
ELSE sel_out.seller_id
END AS seller_id,
CASE
WHEN temp_table.col_1 IS NOT NULL
AND TRIM(temp_table.col_2)<>'' THEN sel_in.seller_name
ELSE sel_out.seller_name
END AS seller_name ,
CASE
WHEN temp_table.col_1 IS NOT NULL
AND TRIM(temp_table.col_2)<>'' THEN sel_in.seller_number
ELSE sel_out.seller_number
END AS seller_number
FROM table_seller_inside sel_in,
table_seller_outside sel_out,
temp_table
WHERE -- you need to give join condition/relations
sel_in.id = sel_out.id
AND temp_table.key = sel_out.key
Комментарии:
1. Спасибо за помощь. но то, что у меня на самом деле есть, — это поиск seller_id и попытка получить (seller_id, seller_name, seller_number) как часть из первой таблицы, тогда, если только «seller_id» не существует в первой таблице, поэтому я возьму основную часть (seller_id, seller_name, seller_number) из первой таблицы.вторая таблица. И соединения уже указаны в исходном запросе.