2

私のMySQLデータベースには、次のように2つの列が設定されています(例):

series_id   category_id
    1            1
    1            2
    1            3
    2            1
    2            3
    3            2
    4            1
    4            2

category_id = 1 および 2 の場合に series_id を選択するために使用できる適切な選択クエリは何ですか?

現在のクエリは次のとおりです。

SELECT series_id 
FROM table 
WHERE category_id = '1' 
OR category_id = '2' 
GROUP BY series_id"

これは結果を取得しません。

SELECT series_id 
FROM table 
WHERE category_id = '1' 
AND category_id = '2' 
GROUP BY series_id

この例に関しては、series_id が 1 と 2 の 2 つの行を返すようにしたいので、結果は次のようになります。

series_id
     1
     4

(オプション/ボーナス)別の解決策を考え出すか、利用できる場合:

GROUP_CONCAT(category_id SEPARATOR ', ') AS category

このクエリから返された series_id に対して、返される結果は次のようになります。

series_id    category
     1       1, 2, 3
     4       1, 2
4

2 に答える 2

4
SELECT   series_id
FROM     my_table
WHERE    category_id IN (1,2)
GROUP BY series_id
HAVING   COUNT(*) = 2

sqlfiddleで参照してください。

(series_id, category_id)が一意であることが保証されていない場合は、COUNT(*)パフォーマンスの低いに置き換える必要があることに注意してくださいCOUNT(DISTINCT category_id)

グループ化された結果を返すには、テーブルに対して再度結合できます。

SELECT series_id, GROUP_CONCAT(category_id)
FROM   my_table NATURAL JOIN (
  SELECT   series_id
  FROM     my_table
  WHERE    category_id IN (1,2)
  GROUP BY series_id
  HAVING   COUNT(*) = 2
) t
GROUP BY series_id

sqlfiddleで参照してください。

于 2012-09-07T12:33:59.837 に答える
2

後で `GROUP_CONCAT を使用できるようにするにはSubQuery、 を取得する必要があります。series_id

SELECT series_ID, GROUP_CONCAT(category_id)
FROM tableName
WHERE series_ID IN
        (
            SELECT series_id
            FROM tableName
            WHERE Category_ID IN (1,2)
            GROUP BY seriesID
            HAVING COUNT(series_id) = 2
        )
GROUP BY series_ID

SQLFiddle デモ

これがお役に立てば幸いです。

ここに画像の説明を入力

于 2012-09-07T12:36:03.710 に答える