首頁 > 資料庫 > mysql教程 > 在 MySQL 中產生巢狀 JSON 物件時如何避免「子查詢傳回超過 1 行」錯誤?

在 MySQL 中產生巢狀 JSON 物件時如何避免「子查詢傳回超過 1 行」錯誤?

DDD
發布: 2024-11-28 06:31:11
原創
792 人瀏覽過

How to Avoid

使用MySQL 本機JSON 函數產生巢狀JSON 物件

問題:

尋求利用本機JSON 函數的MySQL 使用者可能會面臨從關聯式資料庫建立嵌套JSON 物件的挑戰。具體來說,嘗試從一對多關係建立子物件會觸發「子查詢傳回超過 1 行」錯誤。

解決方案:

有效產生嵌套使用 MySQL 的 JSON 對象,避免使用在父對象的輸入中返回多個結果的子查詢至關重要。相反,使用 GROUP_CONCAT 函數連接結果並將它們轉換為 JSON 陣列。

範例:

基於問題中提供的範例,以下查詢將產生所需的JSON 結構:

SELECT JSON_OBJECT(
  'id', p.id,
  'desc', p.`desc`,
  'child_objects',
  (
    SELECT CAST(CONCAT('[',
                GROUP_CONCAT(JSON_OBJECT('id', id, 'parent_id', parent_id, 'desc', `desc`)),
                ']')
         AS JSON)
    FROM child_table AS c
    WHERE c.parent_id = p.id
  )
)
FROM parent_table AS p;
登入後複製

此查詢利用CONCAT和GROUP_CONCAT 進行合併最終結果中所需的子物件。將連接的字串轉換為 JSON 資料類型可確保巢狀結構的正確格式。

結果:

渲染的 JSON物件將與中指定的格式緊密一致問題:

{
  "id": 1,
  "desc": "parent row 1",
  "child_objects": [
    {
      "id": 1,
      "parent_id": 1,
      "desc": "child row 1"
    },
    {
      "id": 2,
      "parent_id": 1,
      "desc": "child row 2"
    }
  ]
}
登入後複製

附加註意:

  • 此解決方案透過將逗號分隔結果轉換為逗號分隔的字串來解決「​​子查詢傳回超過1 行」錯誤。
  • 使用 CONCAT 並轉換結果到 JSON 確保巢狀結構格式正確。
  • 此方法與 MySQL 版本 5.7.12 相容,並且上面。

以上是在 MySQL 中產生巢狀 JSON 物件時如何避免「子查詢傳回超過 1 行」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板