2017-02-23 53 views
0

У меня есть две таблицыДобавление значений в колонке на основе другого столбца отдельной таблицы SQL

Followers_list

User_name Followers_name 
user 1   user 2 
user 1   user 3 
user 3   user 4 

Final_table

User_name   M_User  Total Follower 
    user 1   user2  8   NULL 
    user 2   user 3  9   NULL 
    user 3   user 4  2   NULL 

Что я хочу изменить таблицу, как это

User_name   M_User  Total Follower 
    user 1   user2  8   1 
    user 2   user 3  9   0 
    user 3   user 4  2   1 

В принципе, я хочу сопоставить две таблицы и посмотреть, соответствует ли user_namem_user и положил 1, если да еще 0 Это то, что я сделал до сих пор, но это дает мне "FL"."F_USER_NAME": invalid identifier ошибки.

UPDATE FINAL_TABLE SET FB.FOLLOWER = (CASE 
     WHEN FB.USER_NAME = FL.USER_NAME AND FB.M_USER = FL.F_USER_NAME 
    THEN  1 
     ELSE 0 
    END); 

    FROM 
     FINAL_TABLE fb, 
     FOLLOWERS_LIST fl 

Как я могу решить эту проблему?

+0

Вы должны использовать инструкцию и UPDATE с коррелированным подзапросом в предложении SET. –

+0

Спасибо, что разрешили вышеуказанную ошибку, но это дало мне «FL». «F_USER_NAME»: неверная ошибка идентификатора – melissa

+0

Это потому, что вы назвали его 'Followers_name' в' Followers_list', а не 'F_USER_NAME' – JeromeFr

ответ

0

Вы можете использовать подзапрос для извлечения значения вы хотите назначить, например:

UPDATE Final_table FB 
    SET FB.FOLLOWER = 
    (SELECT CASE WHEN COUNT(*) > 0 THEN 1 
         ELSE 0 END 
     FROM FOLLOWERS_LIST fl 
     WHERE FB.USER_NAME = FL.USER_NAME AND FB.M_USER = FL.F_USER_NAME); 

Вот мое испытание: https://livesql.oracle.com/apex/livesql/s/el9abzc95lirn6mrt4l0lfod7

0

Если follower_list таблицы имеет сочетание уникального значения, вы не даже нужен пункт СЛУЧАЙ:

UPDATE final_table a SET a.follower = (SELECT COUNT(*) FROM follower_list b WHERE a.user_name = b.user_name AND b.followes_name = a.m_user);

Это потому, что COUNT (*) Агрегатная функция всегда возвращает значение, даже если в целевой таблице нет записей, и если есть только одна запись для этой комбинации user_name и followers_name. Таким образом, вы всегда будете получать 0 или 1.