【问题标题】:SQL select two columns from one entrySQL 从一个条目中选择两列
【发布时间】:2026-02-13 01:40:01
【问题描述】:

如何在条目末尾使用正则表达式从一列中查询两列?

表格图片:

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" height="50" width="200">' 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 中做。

标签: sql oracle oracle-apex


【解决方案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/…