1

我有一个带有类别列表的表 ItemCategory,并且此类别分配有项目。如下所示:

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

现在我需要获取没有任何类别值的项目。也就是说,在这种情况下,类别为零的是 4 和 5。但不是因为它被分配了至少一个类别。

我实际上将这些与另一个名为 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 回答
0

试试这个 sql。

select item_id
from Table
group by item_id
having max(category_id)=0
and count(item_id)=1
于 2013-06-03T11:38:58.093 回答