在SQL中正确获取嵌套列表

时间:2014-11-09 12:00:01

标签: mysql sql

我遇到了SQL请求的设计问题:

我需要返回如下数据:

listChannels:
    -idChannel
     name
     listItems:
        -data
        -data
    -idChannel
     name
     listItems:
        -data
        -data

我现在的解决方案是发送第一个请求: *" SELECT * FROM Channel WHERE idUser = ..." * 然后在循环中获取结果,我为每个raw发送另一个请求以感受嵌套列表: " SELECT FROM FROM Item WHERE idChannel = ..." 它会杀死应用程序,显然不是要走的路。

我知道如何使用join关键字,但它并不完全是我想要的,因为它会为每个listChannels的每个数据返回一行以及所有通道的信息。

如何以干净有效的方式解决这个常见问题?

2 个答案:

答案 0 :(得分:1)

SQL用于访问二维数据表。 (有更多的可能性,但它们非常复杂,可能没有标准化)

因此,解决问题的最佳方法是使用多个请求。如果可能,还请考虑使用交易。

答案 1 :(得分:1)

执行此操作的“SQL”方法会生成包含列idchannelchannelname和项目列的表格。

select c.idchannel, c.channelname, i.data
from channel c join
     item i
     on c.idchannel = i.idchannel
order by c.idchannel, i.item;

请记住,SQL查询以表格的形式返回结果集。这意味着所有行都具有相同的列。如果需要列列表,则可以进行聚合并将项目放在列表中:

select c.idchannel, c.channelname, group_concat(i.data) as items
from channel c join
     item i
     on c.idchannel = i.idchannel
group by c.idchannel, c.channelname;

以上使用MySQL语法,但大多数数据库都支持类似的功能。