在 SQL 咨询中返回多列

Posted

技术标签:

【中文标题】在 SQL 咨询中返回多列【英文标题】:Return multiple columns in SQL consult 【发布时间】:2020-10-21 14:38:22 【问题描述】:

我需要创建一个查询来返回同一个表中的多个值,并将其作为结果的列返回,例如:

在此表中,路径值不同,但可以具有相同的 id_location。

SELECT
    Name,
    Address,
    path
from
    `table_location` as A
inner JOIN table_images as B
on A.id = B.id_location

where A.des

这次回归

test1, example, pathExample1
test1, example, pathExample2
test3, example, pathExample3
test3, example, pathExample4

如何在列中返回路径?

例子:

test1, example, pathExample1, pathExample2
test3, example, pathExample3, pathExample4

我该怎么做?

【问题讨论】:

【参考方案1】:

您可以使用group_concat()

SELECT
    Name,
    Address,
    group_concat(path) as path
from
    `table_location` as A
inner JOIN table_images as B
on A.id = B.id_location
group by Name,Address

【讨论】:

【参考方案2】:

最简单的方法是使用group_concat()

select name, address, group_concat(path) as paths
from table_location l join
     table_images i
     on l.id = i.id_location
where A.des
group by name, address;

这会将结果放入单个列中。如果你想要两列,那么你可以使用:

select name, address, min(path), nullif(max(path), min(path))
from table_location l join
     table_images i
     on l.id = i.id_location
where A.des
group by name, address;

【讨论】:

【参考方案3】:

据我了解,问题是如何将每个位置的图像旋转到不同的列。

如果你事先知道每个位置的最大图像数量,你可以做如下条件聚合:

select l.name, l.address,
    max(case when i.rn = 1 then i.path end) path1,
    max(case when i.rn = 2 then i.path end) path2,
    max(case when i.rn = 3 then i.path end) path3
from table_location l
inner join (
    select i.*, row_number() over(partition by id_location order by path) rn
    from table_images i
) i on i.id_location_id = l.id
group by l.id

您可以向select 子句添加更多条件表达式,以处理每个位置的更多图像。

请注意,row_number() 仅在 mysql 8.0 中可用。

【讨论】:

以上是关于在 SQL 咨询中返回多列的主要内容,如果未能解决你的问题,请参考以下文章

CASE 语句 SQL 中返回多列

SQL 查询返回填充了最多列的行

多列的SQL MAX?

返回 QComboBox 中的多列

从多列返回值的 SQL 函数

基于 SQL (BigQuery) 中的多列返回许多小数据样本