mysql - 从三个表中选择一个值

标签 mysql sql

我有四个表:map、project、test、instance。 实例与测试相关联,而测试与项目相关联。 project、test、instance这三个表都有一个map_id列(可以为null)。

我想用 map_id 更新“实例”条目。这个map_id首先应该来自test的map_id;如果为 null,则使用项目的 map_id。

我可以用代码和多个 SQL 查询来做到这一点;有没有办法在单个更新查询中执行此操作?

如果没有,我可能会在一个新的入口触发器中执行此操作,但我更愿意在事后的单个更新查询中执行此操作。

架构:

map
+map_id

project
+project_id
+map_id

test
+test_id
+project_id
+map_id

instance
+instance_id
+test_id
+map_id

最佳答案

你可以使用 join 和 ifnull

update instance
inner join test on instance.test_id = test.test_id
inner join project on test.project_id = project.project_id
set instance.map_id = ifnull(test.map_id,  project.map_id);

最后添加where进行过滤

update instance
inner join test on instance.test_id = test.test_id
inner join project on test.project_id = project.project_id
set instance.map_id = ifnull(test.map_id,  project.map_id)
where instance.instance_id =  your_value;

关于mysql - 从三个表中选择一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39152352/

相关文章:

mysql - 如何将表名连接到行值以重命名列

mysql - DateTime 按日期和小时分组

Android - sqlite in 子句使用数组中的值

sql - 一对一的选择限制

php - MySQL 查询在由第二个表中的另一个值连接的列中查找最流行的值

mysql - SQL Key值表--选择有多个key的ids

mysql - 连接两个表并获取行数

php - 如何让 PHP 查看日期时间值

mysql - 无法在 WIndows XP 中安装 MySQL 服务器

sql - 使用 SQL 查找身份规范