书写sql语句,我现在有一个city表,里面有city_name(有数据)和city_id(有数据)和一个en表,里面也有city_name(有数据)和city_id(没有数据),我现在想通过en表的city_name在city中找到对应的city_id,保存到en表中
时间: 2023-08-22 15:05:54 浏览: 214
可以使用以下 SQL 语句:
```
UPDATE en
SET city_id = (SELECT city_id FROM city WHERE city.city_name = en.city_name)
WHERE city_id IS NULL;
```
这条语句会将 en 表中 city_id 为空的记录,通过对应的 city_name 在 city 表中查找对应的 city_id 并更新到 en 表中。
相关问题
一张表中有字段id、pid、city用sql语句查处省市区三级的数据
我能够帮你解决这个问题。你可以使用递归查询语句来实现这个功能。以下是示例 SQL 语句:
WITH RECURSIVE cte(id, pid, level, name) AS (
SELECT id, pid, 1, name
FROM your_table
WHERE pid IS NULL
UNION ALL
SELECT t.id, t.pid, c.level+1, t.name
FROM your_table t
INNER JOIN cte c ON t.pid = c.id
)
SELECT id, pid, name,
CASE level
WHEN 1 THEN '省'
WHEN 2 THEN '市'
WHEN 3 THEN '区'
ELSE ''
END as type
FROM cte
ORDER BY id;
这个语句使用递归 CTE(common table expression)查询每个节点的祖先节点,并按照层次关系输出结果。你只需要将 your_table 替换成你的表名,修改 id、pid、name 这三个字段的名称,并执行该 SQL 语句即可。
生成sql语句。在en表中存在city_name字段和city_id字段,部分数据有city_name和city_id的数据,剩余数据只有city_name,如何根据city_name的值来查找en表中的city_id,并将它填充到剩余数据的city_id中
可以使用以下SQL语句来实现:
```
UPDATE en
SET city_id = (
SELECT city_id
FROM en AS e
WHERE e.city_name = en.city_name
AND e.city_id IS NOT NULL
)
WHERE city_id IS NULL
AND city_name IS NOT NULL;
```
这条语句会先从en表中选择出所有city_id和city_name都存在的数据,然后根据剩余数据的city_name来匹配符合条件的city_id,并将其填充到剩余数据的city_id中。注意要排除掉city_id或city_name为空的数据,以及避免出现重复匹配的情况。
阅读全文