Условная логика JAVA для запроса Impala

#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) из первой таблицы.вторая таблица. И соединения уже указаны в исходном запросе.