1

カテゴリ リストを持つテーブル ItemCategory があり、このカテゴリにはアイテムが割り当てられています。次のようなものです。

+---------+-------------+
| item_id | category_id |
+---------+-------------+
|       1 |           1 |
|       2 |           1 |
|       3 |           0 |
|       3 |           2 |
|       3 |           8 |
|       4 |           0 |
|       5 |           0 |
+---------+-------------+

ここで、カテゴリ値を持たないアイテムを取得する必要があります。つまり、この場合、カテゴリがゼロの 4 と 5 です。ただし、少なくとも 1 つのカテゴリが割り当てられているわけではありません。

私は実際にこれらを Networks および Items という別のテーブルと結合しているので、このようなクエリを使用します。

SELECT Network.networkname,Items.item_id,ItemCategory.catname 
FROM Network 
JOIN Items 
ON Items.networkid=network.networkid 
JOIN ItemCategories 
ON ItemCategory.item_id=Item.item_id
4

3 に答える 3

2

これを試してください:

SELECT * FROM Table1
WHERE item_id IN ( 
                   SELECT item_id FROM Table1
                   GROUP BY item_id
                   HAVING MAX(category_id) = 0
                 )

結果:

╔═════════╦═════════════╗
║ ITEM_ID ║ CATEGORY_ID ║
╠═════════╬═════════════╣
║       4 ║           0 ║
║       5 ║           0 ║
╚═════════╩═════════════╝

このSQLFiddleを参照してください

DISTINCT結果に重複した行が必要ない場合は、キーワードを使用できます。

SELECT DISTINCT * FROM Table1
WHERE item_id IN ( 
                   SELECT item_id FROM Table1
                   GROUP BY item_id
                   HAVING MAX(category_id) = 0
                 );

詳細については、この SQLFiddleを参照してください。

于 2013-06-03T11:15:15.417 に答える
2
select * from a group by item having count(distinct category)=1 and category=0;
于 2013-06-03T11:24:04.130 に答える