SQL 从一个条目中选择两列
Posted
技术标签:
【中文标题】SQL 从一个条目中选择两列【英文标题】:SQL select two columns from one entry 【发布时间】:2020-10-08 07:52:13 【问题描述】:如何在条目末尾使用正则表达式从一列中查询两列?
表格图片:
IMAGE_NAME IMAGE_ID
---------------------------
image01_01.png 0
image01_02.png 1
image02_01.png 2
image02_02.png 3
select
IMAGE_NAME,
IMAGE_ID,
<img src="https://my_page?im_id='||IMAGE_ID||'" class="test" >' IMAGE
from
IMAGES
where
IMAGE_NAME like '%01.png'
显示所有以图片名称结尾的 01.png 的图片。此外,我需要第二列显示所有以图片名称结尾的 02.png 的图片。
如何实现这个查询得到两列?
编辑:我想在 Apex 的交互式报告中显示两个图像列。
编辑 #2:显示带有 img 标签的图像时变得更加复杂。
预期的列结果应该是可以在 Apex 中显示的 html 图像对象:
https://my_page?im_id=0
Suffix_01 | Suffix_02 | Link to image_01 | Link to image_02
----------------+-----------------+------------------------+-----------------
image02_01.png | image02_02.png |https://my_page?im_id=2 | https://my_page?im_id=3
image01_01.png | image01_02.png |https://my_page?im_id=0 |https://my_page?im_id=1
【问题讨论】:
您使用的是哪个 dbms? 不正确的select
语句,因为from
指令前的逗号。
我正在使用 oracle
将数据放在两列中并不是一个有意义的结果集,因为这样每一行的列彼此之间没有任何关系。为什么你想要两列而不是两个结果集 - 或 UNION
的结果?
如果您想在某处(网页?)的两列中显示数据,那么您不应该将结果排列到 UI 显示/网格列中在 SQL 中做。
【参考方案1】:
假设您想要一个具有相同前缀的单行图像名称的表。您可以对其使用条件聚合:
SELECT
t.suffix01,
t.suffix02,
'https://my_page?im_id=' || i1.image_id "Link to image_01",
'https://my_page?im_id=' || i2.image_id "Link to image_02"
FROM
(SELECT
MAX(CASE WHEN Image_name like '%01.png' THEN Image_name END) suffix01,
MAX(CASE WHEN Image_name like '%02.png' THEN Image_name END) suffix02
FROM
Images
GROUP BY
SUBSTR(image_name, 1, LENGTH(image_name) - 6)) t
JOIN
images i1 ON i1.image_name = t.suffix01
JOIN
images i2 ON i2.image_name = t.suffix02
DEMO
结果:
suffix01 | suffix02 | Link to image_01 | Link to image_02
----------------+-----------------+-------------------------+------------------
image02_01.png | image02_02.png | https://my_page?im_id=2 | https://my_page?im_id=3
image01_01.png | image01_02.png | https://my_page?im_id=0 |https://my_page?im_id=1
【讨论】:
我会使用GROUP BY SUBSTR(image_name, 1, LENGTH(image_name) - 6)
来处理文件名中的任意数量的下划线('some_image_01.png'、'otherimage01png')。
谢谢这工作,但现在我在显示图像时遇到了一些问题。如何查询图像标签所需的另一列(image_id)?我编辑了我的问题,对此感到抱歉。
也发布预期结果
我添加了结果
好的,那就用@ThorstenKettner 提出的GROUP BY
dbfiddle.uk/…以上是关于SQL 从一个条目中选择两列的主要内容,如果未能解决你的问题,请参考以下文章