繁体   English   中英

从子查询中选择多个结果到单行中(作为数组数据类型)

[英]Select multiple results from sub query into single row (as array datatype)

我正在尝试解决Oracle数据库中SQL查询的一个小问题。 假设我有这些表:

一张包含汽车信息的表:

tblCars
ID    Model    Color
--------------------
1     Volvo    Red
2     BMW      Blue
3     BMW      Green

另一个包含有关驱动程序的信息:

tblDrivers
ID    fID_tblCars    Name
---------------------------
1     1              George
2     1              Mike
3     2              Jason
4     2              Paul
5     2              William
6     3              Steve

现在,让我们假装要发现汽车的受欢迎程度,我想创建一个报告,其中包含有关汽车及其驾驶人员的数据(这似乎很合理,可以通过数据库来完成)。

该“ ReportObject”将具有用于模型的字符串,用于颜色的字符串和用于驱动程序的字符串数组(或列表)。

目前,我通过两个查询来执行此操作,在第一个查询中,我选择了汽车

SELECT ID, Model, Color FROM tblCars

并为每个结果创建一个报告对象。

然后,我将获取每个结果并获取每个特定汽车的驾驶员

SELECT Name FROM tblDrivers WHERE fID_tblCars = ResultObject.ID

基本上,第一步提供了一个结果如下所示的数据集:

Result
------------------------------------------
ColumnID        ColumnModel    ColumnColor
Type Integer    Type String    Type String

现在,如果将来我会有更多的汽车,我将不得不进行很多其他查询,即对结果表中的每一行进行一次查询。

当我尝试这个:

SELECT Model, Color, (SELECT Name FROM tblDrivers WHERE tblDrivers.fID_tblCars = tblCars.ID) as Name FROM tblCars

我收到一些错误消息,告诉我该行中的一个结果包含多个元素(这就是我想要的!)。

我希望结果看起来像这样:

Result
--------------------------------------------------------
ColumnID        ColumnModel    ColumnColor    ColumnName
Type Integer    Type String    Type String    Type Array

因此,当我构建报表对象时,我可以执行以下操作:

foreach (var Row in Results)
{
    ReportObject.Model = Row.Model;
    ReportObject.Color = Row.Color;
    foreach (string Driver in Row.Name)
    {
        ReportObject.Drivers.Add(Driver);
    }
}

我是否在这里完全失去了基础知识,还是必须将其分为多个查询?

谢谢!

这在Oracle中有效。 在SQL Fiddle示例中,创建表时我无法获得IDENTITY或PRIMARY KEYS的作用(以前从未使用过Oracle SQL)

SELECT  c.id, 
    c.model, 
    c.color,
    LISTAGG(d.name, ',') WITHIN GROUP (ORDER BY d.name) AS "Drivers"
FROM tblCars c
JOIN tblDrivers d
ON c.id = d.fID_TblCars
GROUP BY c.id,
    c.model,
    c.color
ORDER BY c.Id

SQL小提琴示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM