mysql - MYSQL用连接表中的值填充行空白 - 随机空格
问题描述
我有两张桌子,一张是主图像行,另一张是备用图像。
主表...
id | image1 | image2 | image3 | image4 | image5 |
__________________________________________________________________________
3498 | main-1.jpg | main-2.jpg | NULL | NULL | NULL
3476 | main-1.jpg | main-2.jpg | NULL | NULL | NULL
3034 | main-1.jpg | NULL | NULL | NULL | NULL
3698 | main-1.jpg | main-2.jpg | main-3.jpg | NULL | NULL
alt_images_table.......
id | alt_image1 | alt_image2 | alt_image3
_________________________________________________________________________
3498 | alt-1.jpg | alt-2.jpg | alt-3.jpg
3476 | alt-1.jpg | alt-2.jpg | NULL
3034 | alt-1.jpg | NULL | NULL
3698 | alt-1.jpg | alt-2.jpg | alt-3.jpg
这两个表由 id 连接。用 alt_images_table 中的 alt 图像填充 main_table 中的 NULL 的最佳方法是什么?我想可能会在行中进行计数字段,然后在下一个数字字段中填充图像。
SET image3=
CASE
WHEN image1 is not NULL and image2 IS NOT NULL THEN alt_image1......etc.....etc....
END
但这将有很多代码需要设置。我只是不确定是否有更好的方法。到目前为止,我所想的一切似乎都超过了代码的顶部。主图像之间永远不会有空白。如示例所示,它们的数量在每一行中有所不同。
谢谢
解决方案
鉴于这些null
值都在最后,您可以使用以下方式表达逻辑case
:
update maintable m join
alt_images ai
on m.id = ai.id
set m.image1 = coalesce(m.image1, a.alt_image1),
m.image2 = (case when m.image1 is null then a.alt_image2
when m.image2 is null then a.alt_image1
else m.image2
end),
m.image3 = (case when m.image1 is null then a.alt_image3
when m.image2 is null then a.alt_image2
when m.image3 is null then a.alt_image1
else m.image3
end),
m.image4 = (case when m.image1 is null then a.alt_image4
when m.image2 is null then a.alt_image3
when m.image3 is null then a.alt_image2
when m.image4 is null then a.alt_image1
else m.image4
end),
m.image4 = (case when m.image1 is null then a.alt_image5
when m.image2 is null then a.alt_image4
when m.image3 is null then a.alt_image3
when m.image4 is null then a.alt_image2
when m.image5 is null then a.alt_image1
else m.image5
end);
我意识到它alt_images
没有像maintable
. 但是,我留在了参考文献中,所以逻辑更清晰。
推荐阅读
- python - Numpy数组如何获取行最小值的索引
- angular - 带有香蕉盒语法的角度双向数据绑定不起作用
- docker - Postgresql 容器未在 docker-compose 文件中运行 - 为什么会这样?
- java - 比较器和优先队列
- postgresql - 在没有 CROSS JOIN 的情况下计算 Postgres 11.7 中每一行的平均计数
- visual-studio - 问题:“nvcc 致命:无法为 Microsoft Visual Studio 设置环境”
- java - 如何从 Hybris 枚举类型转换为 Java 日历?
- c# - 如何通过 Visual Studio 为 ASP.Net Web 应用程序(C#)启用 LARGEADDRESSAWARE
- python - 您好,我有一个文本文件,我想使用 python 以 UTF-16 unicode 编写
- android - 每次在 Playstore 上更新 .apk 文件时,我们都需要对其进行签名吗?