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

m:n関係のSQL SELECT

    SELECT  u.*
    FROM    (
            SELECT  user_id
            FROM    tag t
            JOIN    user_has_tag uht
            ON      uht.tag_id = t.id
            WHERE   tag_name IN ('apple', 'orange', 'banana')
            GROUP BY
                    user_id
            HAVING  COUNT(*) = 3
            ) q
    JOIN    user u
    ON      u.id = q.user_id
    

    HAVING COUNT(*)を削除する 、ORを取得します ANDの代わりに (これは最も効率的な方法ではありませんが)

    3を置き換える 2を使用 、3つのタグのうち2つだけが定義されているユーザーを取得します。

    = 3を置き換える >= 2を使用 、3つのタグのうち少なくとも2つが定義されているユーザーを取得します。



    1. SQLでの条件付きUPDATEステートメントの使用

    2. 文字列を連結/集約するための最適な方法

    3. BLOBmysqlpythonからファイルを書き込みます

    4. Mysqlでこれを解決する方法(#1242-サブクエリは複数の行を返します)?