如果包含其他列的子字符串,则更新记录值

时间:2019-05-29 21:00:33

标签: sql database pattern-matching postgresql-9.5

我有两个表,一个包含英国所有唯一的城镇名称,另一个包含人类输入的居住国。当然,人类会写诸如“英国伦敦”或“英国卡迪夫”之类的东西。

我需要合并country_of_residence列,因此我创建了一个表,其中包含英国几乎所有的9000个记录的城镇,县,城市和村庄。

如果列country_of_residence的记录包含表entity的列uk_geo_entities中的任何记录,我想更新列a_table uk_geo_entities country_of_residence | ... entity | ... -------------------- + ... ------ + ... london, uk london cardiff, england cardiff UPDATE a_table SET country_of_residence = 'united kingdom' FROM (SELECT entity FROM uk_geo_entities) b WHERE country_of_residence LIKE '%'||b.entity||'%';

我在这里阅读了很多答案,但是它们都尝试通过检查或更新一个字符串来进行更新,我需要针对列的每个记录进行此操作。

UPDATE psc_sharing_dodgy_officers
SET country_of_residence = 'united kingdom'
WHERE country_of_residence LIKE '%'||(SELECT entity FROM 
uk_geo_entities)||'%';

a_table                         

country_of_residence | ...          
-------------------- + ...     
united kingdom                       
united kingdom

运行,但是什么也没有发生。

查询成功后,我需要查看

import React from 'react';
import ReactDOM from 'react-dom';

const colors=["white","green","blue", "red", "orange"];

class Grid extends React.Component{

  constructor(props){    
    super(props);
    this.state={
      color: colors[0]
    };  
  }

  setCurrentColor(setColor){  
    this.setState({
      color: setColor
    });
  }
 
  setColorSelections(){
    const colorItems = colors.map((thecolor) =>
      <li  
      onClick={(thecolor) => this.setCurrentColor(thecolor)  }
      key={thecolor} >
      {thecolor}
      </li>
    );
    return(
      <ul>        
        {colorItems}
      </ul>
    ) 
  }
 
  render(){
    return(
      <div> 
        <p>Current selection: {this.state.color}</p>
              {this.setColorSelections()}
      </div>
    )
  }
}

1 个答案:

答案 0 :(得分:0)

您可以在WHERE子句中使用EXISTS进行操作:

UPDATE a_table a
SET country_of_residence = 'united kingdom'
WHERE EXISTS (
  SELECT entity 
  FROM uk_geo_entities
  WHERE a.country_of_residence LIKE '%' || entity || '%'
)

请参见demo