使用T-SQL匹配SQL Server 2008中的两个表

时间:2016-05-27 13:42:08

标签: sql-server sql-server-2008

我有两张桌子 - CATEGORYITEM

  • CATEGORY表格有两列:CategoryGroup_Name

  • ITEM表的列数很少,但感兴趣的列是CategoryGroup_NameItem_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

我的要求是:

  1. ITEM表格组中的每条记录都应该只有一个与group_name表格中的GROUP匹配的

  2. 另外,假设Category有3个组,比如A,B,C。 ITEM表只有一个组A的匹配条目,但只要存在组'ALL_GROUPS'的另一条记录,就可以了。

  3. 在示例中,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

    -----添加了表的“实际”屏幕截图和我的要求。实际上应通过预期查询报告(选择)红色突出显示的行 enter image description here

1 个答案:

答案 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'))

Demo here