选择没有至少一个关联的值

时间:2013-06-03 11:11:26

标签: mysql sql

我有一个包含类别列表的表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

3 个答案:

答案 0 :(得分: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 ║
╚═════════╩═════════════╝

请参阅this SQLFiddle

如果您不希望结果中出现重复行,则可以使用DISTINCT关键字:

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

有关详细信息,请参阅this SQLFiddle

答案 1 :(得分:2)

select * from a group by item having count(distinct category)=1 and category=0;

答案 2 :(得分:0)

试试这个sql。

select item_id
from Table
group by item_id
having max(category_id)=0
and count(item_id)=1