根据单独的表sql的另一列在列中添加值

时间:2017-02-23 07:59:39

标签: sql oracle

我有两张桌子

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_name是否跟随m_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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果follower_list表具有唯一的值组合,您甚至不需要CASE子句:

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。