选择数组、子查询和多行结果
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 用逗号和分号分隔,并且成功了。以上是关于选择数组、子查询和多行结果的主要内容,如果未能解决你的问题,请参考以下文章