mariadb - 从 SELECT 或 UPDATE 中的不同行中查找值
问题描述
我有一个充满植物名称的大型数据库。我有一列带有物种(拉丁)名称,还有一列带有荷兰名称。不幸的是,荷兰人的名字并不完整。
id species name_nl
2475 Ligustrum Liguster
2476 Ligustrum delavayanum Bolliguster
2477 Ligustrum japonicum Japanse liguster
12300 Ligustrum ibota ...
13937 Ligustrum sinense ...
13938 Ligustrum 'Vicaryi' ...
在我继续之前,一个小的植物学解释:一个物种名称由一个属 (Liguster) 和一个加词 (delavayanum) 组成。我的列表有一个属的默认名称(在本例中为 id 2475),我想用它来填写缺失的荷兰名称。我的策略是使用 SUBSTRING_INDEX 从物种名称中获取属,并使用它来查找通用名称,并用它更新行。所以我应该这样结束:
id species name_nl
2475 Ligustrum Liguster
2476 Ligustrum delavayanum Bolliguster
2477 Ligustrum japonicum Japanse liguster
12300 Ligustrum ibota Liguster
13937 Ligustrum sinense Liguster
13938 Ligustrum 'Vicaryi' Liguster
我尝试了这段 SQL(我现在使用 SELECT 而不是 UPDATE):
SELECT `species`, `name_nl`, SUBSTRING_INDEX(`species`, ' ', 1) as genus, ( SELECT name_nl WHERE species LIKE genus ) FROM `names_nl` WHERE name_nl='';
它很接近,但SELECT name_nl WHERE species LIKE genus
坚持自己的行,这显然会产生 NULL。我希望它每次被调用时都选择 id 2475。这是可能的,如果是的话:如何?提前致谢!
解决方案
对于此示例数据,您可以使用子句中的运算符自联接表LIKE
以ON
获取默认属并使用空列值进行更新:
UPDATE names_nl n1
INNER JOIN names_nl n2 ON n1.species LIKE CONCAT(n2.species, ' %')
SET n1.name_nl = n2.name_nl
WHERE n1.name_nl = '';
请参阅演示。
推荐阅读
- php - Exact Online API - 在与父级相同的调用中获取子实体属性
- sql - ALTER/ADD COLUMN 作为两个或多个现有列的总和
- r - ggplot2 是否使用/继承 R 基本图形中的某些参数?
- amazon-ec2 - Ray 不会分布在集群内的所有可用 CPU 上
- c++ - 'BeginDraw' 与 D2D1 结合使用会导致错误
- java - ticTacToe 已经有值时拒绝值
- json - 如何使用 pandas 从 api 展平 json
- reactjs - 防止在 props 更改时重置 useState 值
- vue.js - Vue – 在方法中访问 JSON 数据
- amazon-web-services - AWS Lambda RDS 从快照还原