sql >> データベース >  >> RDS >> Mysql

MySQL:サブクエリからの完全なデータを使用して、2つの多対多の関係と重複を含むクエリ

    JOINを使用して必要なデータを取得できます sサブクエリ内。名前だけが必要な場合は、次を使用できます:

    SELECT a.id, a.title,
           (SELECT JSON_ARRAYAGG(au.name)
            FROM article_author aa JOIN
                 author au
                 ON au.id = aa.author_id
            WHERE a.id = aa.article_id
           ) as authors,
           (SELECT JSON_ARRAYAGG(t.tag)
            FROM article_tag art JOIN
                 tag t
                 ON art.tag_id = t.id
            WHERE a.id = art.article_id
           ) as tags
    FROM article a;
    

    IDと名前の両方でどのデータ構造が必要かわかりません。各オブジェクトに2つのフィールドを持つJSONオブジェクトの配列が必要な場合:

    SELECT a.id, a.title,
           (SELECT JSON_ARRAYAGG(JSON_OBJECT('name', au.name, 'id', au.id))
            FROM article_author aa JOIN
                 author au
                 ON au.id = aa.author_id
            WHERE a.id = aa.article_id
           ) as authors,
           (SELECT JSON_ARRAYAGG(JSON_OBJECT('tag', t.tag, 'id', t.id))
            FROM article_tag art JOIN
                 tag t
                 ON art.tag_id = t.id
            WHERE a.id = art.article_id
           ) as tags
    FROM article a;
    

    ここ このバージョンのdb<>フィドルです。




    1. MyBatisを使用してOracleで最後の挿入IDを取得するにはどうすればよいですか?

    2. 大文字と小文字を区別しないファイルシステムを使用するMacOSでのMySQLの大文字と小文字を区別するテーブル名

    3. なぜsqlplusが接続しないのですか?

    4. Oracleで作成する前に、テーブルが存在するかどうかを確認してください