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

結合テーブルからのフィルタリング

    JOIN 解決策:

    SELECT t.*
    FROM topics t
     JOIN tags_topics t1 ON (t.id = t1.topicId AND t1.tagId = 1)
     JOIN tags_topics t2 ON (t.id = t2.topicId AND t2.tagId = 2)
     JOIN tags_topics t3 ON (t.id = t3.topicId AND t3.tagId = 3)
    

    GROUP BY 解決策:

    すべてのt.*をリストする必要があることに注意してください GROUP BYの列 MySQLまたはSQLiteを使用しない限り、句。

    SELECT t.*
    FROM topics t JOIN tags_topics tt 
      ON (t.id = tt.topicId AND tt.tagId IN (1,2,3))
    GROUP BY t.id, ...
    HAVING COUNT(*) = 3;
    

    サブクエリソリューション:

    SELECT t.*
    FROM topics t
    WHERE t.id = ANY (SELECT topicId FROM tags_topics tt WHERE tt.tagId = 1)
      AND t.id = ANY (SELECT topicId FROM tags_topics tt WHERE tt.tagId = 2)
      AND t.id = ANY (SELECT topicId FROM tags_topics tt WHERE tt.tagId = 3);
    

    変更されたGROUP BY 解決策:

    GROUP BYを簡素化します サブクエリで検索を分離することによる句。

    SELECT t.*
    FROM topics t
    WHERE t.id IN (
      SELECT tt.topicId FROM tags_topics tt 
      WHERE tt.tagId IN (1,2,3))
      GROUP BY tt.id HAVING COUNT(*) = 3
    );
    


    1. MySQL:行レベルのセキュリティ(Oracleの仮想プライベートデータベースなど)を実行するにはどうすればよいですか?

    2. 1日あたりの注文総数を計算するためのSQLクエリ?

    3. MySQL;多数に最適なデータ型

    4. MySQLの各record_idのすべての列の最後のnull以外のレコードを取得します