0

私はSQLの専門家ではありませんが、完全なアマチュアではありませんが、これはアプローチ方法がわからない2つのフィールドを持つ単一のテーブルに対するクエリです。

クラス番号と学生番号を持つテーブルがあるとします。正確に x、y、z の生徒しかいないクラスをどのように見つけますか?

私の本当の問題は、カタログとアイテム番号の表に似ており、指定されたアイテムを正確に(多かれ少なかれ)持っているすべてのカタログを見つける方法です。

私の唯一の考えは、GROUP_CONCAT でのマッチングを中心に展開されましたが、b731e もっとエレガントな方法があるはずです...

編集:私は問題を誤って述べたので、テーブル構造も提供します。この問題は、ボックスに特定の製品が複数含まれる可能性があるボックス内の製品に似ており、指定された内容と正確に一致するボックスを見つけたいと考えています。たとえば、テーブルは次のようになります。

+------------+------------+------+-----+---------+----------------+
| Field      | Type       | Null | Key | Default | Extra          |
+------------+------------+------+-----+---------+----------------+
| id         | bigint(20) | NO   | PRI | NULL    | auto_increment |
| box_id     | bigint(20) | YES  |     | NULL    |                |
| product_id | bigint(20) | YES  | MUL | NULL    |                |
+------------+------------+------+-----+---------+----------------+

商品 ID が 22、17 のうちの 1 つ、および 55 のうちの 1 つのアイテムが正確に 2 つ含まれているすべてのボックスを検索したいと考えています。それ以上でもそれ以下でもありません。

4

2 に答える 2

2

having次の句を使用できます。

select  *
from    YourTable
group by
        class
having  count(distinct student) = 3
        and max(case when student = 'X' then 1 end) = 1
        and max(case when student = 'Y' then 1 end) = 1
        and max(case when student = 'Z' then 1 end) = 1
于 2012-06-30T15:35:36.697 に答える
0

機能する答えはありますが、効率的またはエレガントとはほど遠いので、この問題に対する次善の正しい解決策を探している人に提示し、より良い解決策を提供するよう他の人に勧めます。

SELECT box_id, GROUP_CONCAT( product_id
ORDER BY product_id DESC 
SEPARATOR  ',' ) AS contents
FROM box_product
GROUP BY box_id
HAVING contents =  '17,22,22,55';
于 2012-10-05T03:26:20.113 に答える