一、数据说明
table_1。包含【区县-城市-省份】三个字段,区县(COUN)是此次需要处理的字段。给出6个示例值;
table_2。仅ethnic一个字段,所有民族名称。给出7个示例值。
数据库为SQLite,数据库之间的SQL语法差异可暂不考虑。至少这个小需求,应该不会出现大差异。
二、处理目标
table_1.COUN,针对这一字段的值
1、如果值由【地名+民族名称】组成,则去除民族名称,只保留地名;
2、如果值只含地名,则保持不变。
换另一种说法:
如果table_1.coun中的值,包含table_2.ethnic的值(%ethnic%),则去除table_2.ethnic的值
三、现行方案
可实现上述第1个处理目标。
但第2个处理目标不能实现——换种说法是以下SQL语句会导致【执行后,COUN字段中应当不变的值,被置为NULL】
UPDATE
TABLE_1 AS A
SET
COUN = (
SELECT
SUBSTR(
A.COUN,
1,
INSTR(A.COUN, B.ETHNIC) -1
)
FROM
TABLE_2 AS B
WHERE
A.COUN LIKE '%' || B.ETHNIC || '%'
);
四、请指教
如何同时实现上述两个处理目标?理解是需要增加一个WHERE语句,但尝试几次都未能成功。
请帮指出思路或写出SQL语句,谢谢
五、附录
提供案例数据
table_a = {
"COUN": {0: "本溪满族", 1: "麻阳苗族", 2: "江华瑶族", 3: "竹溪", 4: "白河", 5: "襄垣"},
"CITY": {0: "本溪", 1: "怀化", 2: "永州", 3: "十堰", 4: "安康", 5: "长治"},
"PROV": {0: "辽宁省", 1: "湖南省", 2: "湖南省", 3: "湖北省", 4: "陕西省", 5: "山西省"},
}
table_b = {
"ETHNIC": {0: "满族", 1: "苗族", 2: "瑶族", 3: "汉族", 4: "白族", 5: "高山族", 6: "其他民族"}
}