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 从一个条目中选择两列的主要内容,如果未能解决你的问题,请参考以下文章

从 JSP 站点中选择条目,使用 SQL 和 JBDC 从数据库中删除条目

选择多个条目的组合

SQL查询从键表中选择多个条目到同一行的不同列中

SQL:从最近的子表条目中选择列

使用每列的选择性聚合从两列创建 SQL 值

Oracle SQL:将选择从一个表插入另一个表,其中用户有多个带有订单号的条目