选择数组、子查询和多行结果

Posted

技术标签:

【中文标题】选择数组、子查询和多行结果【英文标题】:Select arrays, subqueries, and multiple row results 【发布时间】:2015-04-02 17:13:46 【问题描述】:

我正在尝试创建一个查询来从多个表中收集信息。以下是了解我的需求的基础知识:

从表一中收集的信息很简单。每个结果一行。这是主要的结果,所以我们只需将变量 p.id、p.name 和 p.street 调用 table props p。

第二个表中的信息(我将其称为事件 e)也很简单。每个道具将有一个事件,它加入 p.id = e.pid。从该表中,我们需要 e.event_start。

这就是困难的地方。第三个表有两层多重结果:我们称它为特征 f。 Features 中有四列:fid、pid、feature 和 desc。我们在 p.id = f.pid 上加入它。

我需要的是这样的结果:

[0] PID
[1] name
[2] street
[3] event_start
[4] features
    [0] lighting
        [0] red
        [1] orange
    [0] sound
        [0] guitar
        [1] drum
        [2] keyboard

现在,我一直在网上搜索解决方案,认为我可以在选择中使用子查询来做到这一点:

   SELECT p.id, p.name, p.street, e.event_start, (SELECT f.feature)

当然是使用连接。从简单到困难,我还没有得到它的工作。我查看了 GROUP_CONCAT,但这绝对没有给我我需要的东西……它只生成一个字符串,等等。

有没有办法在一个查询中做到这一点?如果是这样,非常欢迎您提出建议。

感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

据我了解;您有三个表 p、e、f,您需要使用 JOIN 从这些表中获取值。是这样吗:

SELECT p.id,p.name,p.street,e.event_start,f.feature,f.desc
                             -- i'm not sure you need features from third table based on conditions. Use CASE WHEN in the select
                             --sorry didn't understand what you mentioned
FROM p JOIN e ON p.id=e.pid
       JOIN f ON p.id=f.pid
WHERE                        --state your conditions

【讨论】:

有点,但不完全。您描述的方法将为我们提供多行:每个特征/值组合都有一个单独的行。我需要的是 pid 的一行,前两个表中的所有其他信息,以及 features 表中的每个功能/值组合。每个 p.id 一行 是行还是列?要使不同列中的值出现在同一列中,您可以在 select 子句中使用 concat: CONCAT(f.feature,',',f.desc)。 我最终使用了 GROUP_CONCAT 和 CONCAT_W 用逗号和分号分隔,并且成功了。

以上是关于选择数组、子查询和多行结果的主要内容,如果未能解决你的问题,请参考以下文章

选择数组、子查询和多行结果

用于查找最大子数组的分而治之算法 - 如何同时提供结果子数组索引?

具有多结果子查询的查询不适用于 jdbc

MYSQL基础九--子查询和连接

子查询时间比较

如果子查询没有返回结果,为啥“= ALL(子查询)”评估为真?