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