обновить таблицу столбцов значением столбца из таблицы b, если она содержит подстроку из другого столбца таблицы b - PullRequest
0 голосов
/ 30 мая 2019

Есть 2 таблицы, как показано ниже:

Table a                        Table b

country_name                   id | string_bone   | country_name
------------------------       ---+---------------+---------------
usa                            1  | usa           | united states  
u s a                          2  | u s a         | united states
united states of america       3  | america       | united states
america                        4  | ...           | ...

Мне нужно обновить table_a.country_name с table_b.country_name, если table_b.string_bone содержится в table_a.country_name.

Я пробовал это:

UPDATE table_a a
SET country_name = b.country_name
WHERE EXISTS (SELECT country_name
              FROM table_b
              WHERE a.country_name LIKE '%' || string_bone || '%') b;

Я бы хотел, чтобы table_a выглядело так после обновления:

Table a                        

country_name                   
------------------------       
united states                            
united states                          
united states      
united states                        

Здесь ссылка на dbfiddle.

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Попробуйте следующее:

UPDATE table_a a
    SET country_name = b.country_name
    from table_a t
    inner join table_b b
    on t.country_name LIKE '%' || b.string_bone || '%';
1 голос
/ 30 мая 2019

ОК, это требование легко реализовать, как показано ниже:

update table_a a set country_name = b.country_name from table_b b where a.country_name ~ b.country_name;

Пример данных, как показано ниже:

postgres=# select * from table_a;
       country_name       
--------------------------
 usa
 u s a
 united states of america
 america
(4 rows)

postgres=# select * from table_b;
 country_name 
--------------
 america
 usa
 u s a
(3 rows)

postgres=# update table_a a set country_name = b.country_name from table_b b where a.country_name ~ b.country_name;
UPDATE 4
postgres=# select * from table_a;
 country_name 
--------------
 usa
 u s a
 america
 america
(4 rows)
...