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

MySQLのマイナス?

    Topic_Tagsテーブルが一意であるとすると、これは正確なに答えます。 質問-しかし、実際の問題に一般化できない場合があります:

    SELECT
      TopicId
    FROM Topic_Tags
    JOIN Tags ON
      Topic_Tags.TagId = Tags.TagId
    WHERE
      Tags.Name IN ('A', 'B', 'C', 'D', 'E', 'F')
    GROUP BY
      TopicId
    HAVING
      COUNT(*) = 3 
      AND MAX(Tags.Name) = 'C'
    

    より一般的な解決策は次のとおりです。

    SELECT 
        * 
    FROM (
        SELECT
            TopicId
        FROM Topic_Tags
        JOIN Tags ON
            Topic_Tags.TagId = Tags.TagId
        WHERE
            Tags.Name IN ('A', 'B', 'C')
        GROUP BY
            TopicId
        HAVING
            COUNT(*) = 3 
    ) as GoodTags
    LEFT JOIN (
        SELECT
            TopicId
        FROM Topic_Tags
        JOIN Tags ON
            Topic_Tags.TagId = Tags.TagId
        WHERE
            Tags.Name = 'D'
            OR Tags.Name = 'E'
            OR Tags.Name = 'F'
    ) as BadTags ON
        GoodTags.TopicId = BadTags.TopicId
    WHERE
        BadTags.TopicId IS NULL
    


    1. エミュレートされたプリペアドステートメントと実際のプリペアドステートメント

    2. 2つの列からの条件の組み合わせmysql

    3. SQLServerのSalesforceSOQL

    4. MYSQLリモート接続にはSSLが必要です