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

MySQL:複数のAND条件との多対多の関係

    現在のクエリを少し変更して、必要な結果を得ることができます:

    SELECT i.id, i.name    -- OK to select name assuming id is the PK
    FROM item i
    LEFT JOIN relation r
        ON i.id = r.item_id
    LEFT JOIN tag t
        ON t.id = r.tag_id
    WHERE t.tag IN ('sport', 'leather')
    GROUP BY i.id
    HAVING COUNT(DISTINCT t.tag) = 2;
    

    これにより、両方のsportを持つすべてのアイテムが返されます。 およびleather タグ。これは、(すでに行っていたように)アイテムごとに集約することで機能しますが、HAVINGでアサートします。 2つの異なる一致するタグがあるという句。 WHEREではこれら2つのタグのみに制限したため HAVINGの場合、句 チェックは集計後に合格します。これは、アイテムが一致していることを意味します。



    1. 単純なLEFTJOINを実行するときに効率的なSQLと一致するように、効率的なDQLステートメントを作成するにはどうすればよいですか?

    2. Laravelでonly_full_group_byオプションを無効にする方法

    3. Oracle:YEARキーワードが無効です

    4. MySQLストアドプロシージャの設計の問題。再帰または階層?