我有一个包含类别列表的表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
答案 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 ║
╚═════════╩═════════════╝
如果您不希望结果中出现重复行,则可以使用DISTINCT
关键字:
SELECT DISTINCT * FROM Table1
WHERE item_id IN (
SELECT item_id FROM Table1
GROUP BY item_id
HAVING MAX(category_id) = 0
);
答案 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