【问题标题】:Join multiple rows of on table into array for joined table将表中的多行加入到数组中以用于连接表
【发布时间】:2021-02-12 13:01:10
【问题描述】:

我有一个名为idcards 的表,表reservations 的ID 上有一个外键。然后我有一个表photos,在表idcards 的id 上有一个外键。

我想从预订 ID 为特定值的身份证以及附加到此身份证的照片中选择所有。

这是我目前所拥有的,但显然每个身份证只选择一张照片:

SELECT i.*, p.photo 
FROM idcards AS i 
INNER JOIN photos AS p 
    ON (i.id=p.iId) 
WHERE i.resId = 1

我怎样才能让我得到的身份证有一个包含所有照片的数组?

【问题讨论】:

  • “数组”与您的问题有什么关系? MySQL 不支持数组。
  • '显然每张身份证只选择一张照片:' - 对我来说并不明显,我会说这会导致每张照片有 1 行。请在问题中添加示例数据和预期结果作为文本。
  • @P.Salmon 你说得对,确实如此,谢谢 :)
  • 我怀疑你正在寻找 group_concat dev.mysql.com/doc/refman/8.0/en/…

标签: mysql sql node.js database express


【解决方案1】:

如果您只需要 photos 表中的字段 photo,您可以将它们分组到一个数组中,将其与身份证相关联,查询如下:

SELECT i.*, JSON_ARRAYAGG(p.photo) FROM idcards AS i LEFT JOIN photos AS p ON (i.id=p.iId) WHERE i.resId = 1 GROUP BY i.id;

或以下,返回同一字段中的照片,用逗号分隔:

SELECT i.*, GROUP_CONCAT(p.photo) FROM idcards AS i LEFT JOIN photos AS p ON (i.id=p.iId) WHERE i.resId = 1 GROUP BY i.id;

【讨论】:

    猜你喜欢
    • 2016-06-17
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2020-04-21
    • 1970-01-01
    • 2018-07-22
    相关资源
    最近更新 更多