我有两张桌子 - CATEGORY
和ITEM
CATEGORY
表格有两列:Category
和Group_Name
ITEM
表的列数很少,但感兴趣的列是Category
,Group_Name
和Item_Name
类别表:
Category GroupName
-----------------------
C1 Electronic
C1 Food
C1 FMCB
C2 foo
C2 bar
项目表格:
Category GroupName ItemName
---------------------------------
C1 Electronic Phone
C1 Food Noodles
C1 ALL_GROUPS Junk
C2 foo xyz
我的要求是:
ITEM
表格组中的每条记录都应该只有一个与group_name
表格中的GROUP
匹配的
另外,假设Category
有3个组,比如A,B,C。 ITEM
表只有一个组A的匹配条目,但只要存在组'ALL_GROUPS'的另一条记录,就可以了。
在示例中,Item表中的类别1是正常的,因为它具有'ALL_GROUPS',但对于类别2,组'bar'缺失。
我写了下面的查询,但要求并不完全满足:
SELECT *
FROM CATEGORY A
WHERE NOT EXISTS (SELECT 'X'
FROM ITEM B
WHERE A.Category = B.Category
AND (A.GROUP_NAME = B.GROUP_NAME
OR A.GROUP_NAME = 'ALL_GROUPS')
)
任何帮助?
TIA
答案 0 :(得分:0)
您只需要更改NOT EXISTS
的第二个条件中使用的别名:
SELECT *
FROM Category A
WHERE NOT EXISTS (SELECT 'X'
FROM Item B
WHERE A.Category = B.Category
AND (A.GroupName = B.GroupName
OR B.GroupName = 'ALL_GROUPS'))