Mysql SQL从另一个表联接

Mysql SQL从另一个表联接,mysql,sql,Mysql,Sql,我有一个表segment,其中segmentCode,Description,pst active,…。我还有一个带有FK SegmentCode、Deelgebied、Deelgebied、的表subarea。现在我想选择所有的线段,但也要选择线段的子区域。我的理想阵列是 segments[[segmentCode, Description, ..., [array with subareas data]],[segmentCode, Description, ..., [array with

我有一个表
segment
,其中
segmentCode,Description,pst active,…
。我还有一个带有
FK SegmentCode、Deelgebied、Deelgebied、
的表
subarea
。现在我想选择所有的线段,但也要选择线段的子区域。我的理想阵列是

segments[[segmentCode, Description, ..., [array with subareas data]],[segmentCode, Description, ..., [array with subareas data]]]

如何在查询中执行此操作?我已经试过了,但它只是给了我一些重复的片段。

有两种方法可以实现这一点:

或者在保存所有必需信息的数据库上执行一条select语句,然后从中构建数组。该语句看起来类似于seg.segmentCode=sub.segmentCode按seg.segmentCode、sub.deelgebiedID排序的sub.segmentCode>SELECT*FROM seg JOIN subea sub。然后,您必须遍历结果,跟踪segmentCode,并在segmentCode更改时创建一个新的segment对象。虽然它不会改变,但您只需将子区域添加到该对象(或创建一个数组)

另一种方法是将流程拆分为多个选择。首先通过seg.segmentCode从段seg ORDER中选择*获得
SELECT*的段。然后在检索到的段上循环并获取每个段的子区域:
SELECT*FROM subarea sub,其中sub.SegmentCode=参数ORDER BY sub.deelgebidd

在您的情况下,选择哪种方法是在性能(一条数据库语句通常更好)与内存消耗和代码复杂性之间进行权衡。

好的,试试这一种

SELECT s.segmentCode, s.Description, a.* 
  FROM segment s 
  LEFT JOIN subarea a 
    ON (s.segmentCode = a.SegmentCode);

我希望它对你有用。

也许你想要一个简单的连接吗?是的,但我在连接方面没有太多经验,你能帮我吗?你想得到像数组啊这样的分区详细信息吗?在这两种情况下,内存消耗都相当大。所以我建议使用第一种方法,因为循环中的db查询有很多问题。。。像“地图”。。如何解决此问题?您可以只显示所需的列,并且可以在查询中重命名列,如下所示:
选择seg.segmentCode,seg.Description为MyRenamedSegmentDescription,sub.Deelgebied为Foo FROM segment seg JOIN subarea sub ON…