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

列に複数の特定の値を持つ異なる行で発生するMySQLSelectID

    WHERE句の式は、単一行に対して機能します 結合された結果セットの。そのため、WHERE category_id = 201 AND category_id = 202 動作しません-1つの行に2つの値を設定できないためです。

    したがって、テーブルの2つの行を結果セットの1つの行に結合する方法が必要です。これは、自己参加で行うことができます :

    SELECT c1.item_id
    FROM item_category AS c1
    INNER JOIN item_category AS c2 ON c1.item_id = c2.item_id
    WHERE c1.category_id = 201 AND c2.category_id = 202
    

    この手法は、 N-1 を必要とするため、3つ、4つ、5つ、またはそれ以上の値を検索する場合にスケールアップするのは困難です。 Nに一致するように参加します 値。

    したがって、別の方法はGROUP BYを使用することです:

    SELECT c.item_id, COUNT(*) AS cat_count
    FROM item_category AS c
    WHERE c.category_id IN (201,202)
    GROUP BY c.item_id
    HAVING cat_count = 2
    

    どちらの手法も問題なく、さまざまな状況でうまく機能します。



    1. Sequelize —DATEフィールドにUNIXタイムスタンプを使用します

    2. C#でSqlTransactionを使用する方法

    3. sqliteが返されました:エラーコード=1、msg =そのような列はありません:kitchen1

    4. Oracleで連結文字列を生成する高速な方法