mysql - 阻碍构建这个跨数据库查询

标签 mysql sql join sql-update

我正在尝试将一些数据从旧数据库迁移到架构略有不同的新数据库,但我的 SQL 并不是非常强大。

旧模式:有一个我们称之为“Person”的表,其中的字段可以具有 3 个标志的排列集。 Person 表有一个指向另一个表的外键,我们将其称为“Flags”。他们的标志表在字符串中包含每个标志组合的行:

1 - Yes No No
2 - Yes Yes No
3 - Yes No Yes
4 - Yes Yes Yes
5 - No Yes No
6 - No Yes Yes
7 - No No Yes

新架构不需要此表(值得庆幸的是)。这些标志只是“Person”表中的字段,现在作为 BIT 字段。

我想做的是:

UPDATE database2.Person SET (flag1, flag2, flag3) VALUES (true, false false) WHERE database1.Person.flag_id = 1;

然后我可以运行 7 个不同的查询,相应地更改 ID 和值。当然,问题是上面的 SQL 不是正确的。我想我需要某种 JOIN ...或者在 where 子句中进行子选择或其他什么?

困惑于最好的前进方向。我的最后想法是,这不需要压缩为单个查询,也不需要特别优雅。我希望运行此查询一次并完成它。

最佳答案

你可以尝试这样的事情:

update database2.Person p2 join database1.Person p1 on p1.PersonId = p2.PersonId
set    flag1 = case when p1.Flag_id in (1,2,3,4) then true else false end case,
       flag2 = case when p1.Flag_id in (2,4,5,6) then true else false end case,
       flag3 = case when p1.Flag_id in (3,4,6,7) then true else false end case

(针对 mySQl 语法进行编辑)

关于mysql - 阻碍构建这个跨数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16817603/

相关文章:

sql - 如何摆脱带有自动递增键的更新语句的并发问题?

mysql 在多个连接表中搜索(7 个表,6 个连接)

mysql - 多表连接耗时过长

mysql - 在mysql中添加信息

php - 如何在主键数据上添加外键数据并显示

sql - 在Django中,如何在字段上对模型进行排序,然后获取最后一个项目?

sql - 有效地选择最新答案

mysql - 我疯狂地试图解决错误,但我做不到。用mysql。执行 INSERT INTO 时出现外键错误。

mysql - SQL 追加到 VARCHAR 列失败并出现截断双错误

Java - 如何从 MySQL 中检索多个 blob 图像