为什么RDBMS不以嵌套格式返回联接的表?
例如,假设我要获取一个用户及其所有电话号码和电子邮件地址。电话号码和电子邮件存储在单独的表中,多个电话/电子邮件的一位用户。我可以很容易地做到这一点: SELECT * FROM users user LEFT JOIN emails email ON email.user_id=user.id LEFT JOIN phones phone ON phone.user_id=user.id 问题在于,它会为每条记录(用户通过电子邮件发送电话记录)一遍又一遍地返回用户名,DOB,最喜欢的颜色以及存储在用户表中的所有其他信息,这可能会占用带宽并减慢速度降低结果。 那岂不是更好,如果它返回一个单列为每个用户,而该纪录内有一个列表的电子邮件和列表的手机?这也将使数据更容易使用。 我知道您可以使用LINQ或其他框架来获得类似的结果,但这似乎是关系数据库的基础设计中的一个弱点。 我们可以通过使用NoSQL解决此问题,但是不应该有一些中间立场吗? 我想念什么吗?为什么不存在? *是的,它是按照这种方式设计的。我知道了。我想知道为什么没有替代方法更容易使用。SQL可以继续做它在做的事情,但是他们可以添加一个或两个关键字来做一些后期处理,这些后处理以嵌套格式而不是笛卡尔乘积返回数据。 我知道可以使用您选择的脚本语言来完成此操作,但是它要求SQL Server发送冗余数据(下面的示例),或者发出多个查询,例如SELECT email FROM emails WHERE user_id IN (/* result of first query */)。 而不是让MySQL返回类似于此的内容: [ { "name": "John Smith", "dob": "1945-05-13", "fav_color": "red", "email": "johnsmith45@gmail.com", …