私はいくつかの方法を提案:
、3-第三1:(回答として勤務してマークされている)
SELECT tbl.id_px FROM
(SELECT id_px ,
SUM(id_category NOT IN (1,32)) as b ,
SUM(id_category = 1) as t1 , SUM(id_category = 32) as t2
FROM my_table
GROUP BY id_px) as tbl
WHERE tbl.b = 0 AND tbl.t1 = 1 AND tbl.t2 = 1
、4-再構築クエリ-2:
4.1 - 最初のステップ再構築:(非効率的な)012で
SELECT tbl.id_px FROM
(SELECT id_px , CONCAT('-,' , GROUP_CONCAT(id_category),',') as gr
FROM my_table
GROUP BY id_px
) as tbl
WHERE
INSTR(tbl.gr , ',1,' )>0
AND INSTR(tbl.gr , ',32,')>0
AND LENGTH(tbl.gr)-LENGTH(REPLACE(REPLACE(tbl.gr,',1,' ,''), ',32,' ,'')) = LENGTH(CONCAT(',1,' , ',32,'))
最後の条件
4.2-新しい可能性ワーキングクエリを:(が簡略ので、このいずれかにクエリを書き直すtbl.gr
から1および32を置換して低下長さは1および32列に等しい場合LENGTH
を低減比較すると、わずか1及び32が存在しました)
SELECT tbl.id_px FROM
(SELECT id_px , GROUP_CONCAT(id_category) as gr
FROM my_table
GROUP BY id_px
) as tbl
WHERE
tbl.gr = '1,32' or tbl.gr = '32,1'
任意のサンプルデータがなければ、これらはOKですが、問題は、正確に二つの値なしその他id_categoryを持っているid_categoryを制限している間、彼らは良い答えをしませんでしたようです。
注:これらの2つのクエリは、id_category
1,32およびおそらく他の多くのid_categoryを持ってid_px
を選択するので、これらは、この質問join
によってid_px
を選択
2 - のための許容可能な答えではありません
SELECT a.id_px FROM my_table as a LEFT JOIN my_table as b ON a.id_px = b.id_px WHERE a.id_category = 1 AND b.id_category = 32 GROUP BY a.id_px
1- group by
を使用し、id_px
で検索:
SELECT tbl.id_px FROM
(SELECT id_px , CONCAT('-,' , GROUP_CONCAT(id_category),',') as gr
FROM my_table
GROUP BY id_px
) as tbl
WHERE
INSTR(tbl.gr , ',1,' )>0
AND INSTR(tbl.gr , ',32,')>0
最初のクエリでORを使用できませんか?あなたが理解しているように、id_categoryの特定の値を持つレコードだけが必要です。 – smb564
私は特にあなたの両方を持っている必要があるからではありません。あなたが持っている場合はありません。私は両方のIDを具体的に持たせる必要があります。 –
あなたの質問を更新し、適切なデータサンプルと予想される結果を追加できますか? – scaisEdge