AdventureWorks SQL冲突结果问题

时间:2012-04-06 16:29:38

标签: tsql sql-server-2008-r2 adventureworks

我正在使用AdventureWorks示例数据库 - 我们正在运行SQL Server 2008R2,所以我认为这是AdventureWorks的版本(我有只读访问权限)。我正在尝试获取销售经理列表,以便我可以确定一些员工/经理关系。 我得到两组三个不同名称的人,具有相同的职称,其CurrentFlag设置为1(活动),查询略有不同。我注意到一个结果组具有相同的contactID和employeeID,但我不确定这可能表示什么。

所以问题是:为什么我在这两个队列中获得完全不同的结果?我想我会得到六个结果 - 查询匹配员工表标题。

  • SQL查询1:

    select 
       c.FirstName, 
       c.LastName, 
       c.ContactID, 
       e.EmployeeID, 
       e.Title, 
       c.Title, 
       e.CurrentFlag
    from Person.Contact c 
    inner join HumanResources.Employee e
       on c.ContactID = e.ContactID
    where 
       e.Title like '%Sales Manager%'
    
  • SQL查询2:

    SELECT 
       e.EmployeeID, 
       (c.FirstName + ' ' + c.LastName) as 'First Name and Last Name', 
       e.Title
    FROM HumanResources.Employee e 
    INNER JOIN Person.Contact c
        ON e.EmployeeID = c.ContactID
    Where 
        e.Title LIKE '%Manager%'
        AND
        e.Title LIKE '%Sales%'
    ORDER BY e.EmployeeID;
    

更新:这些是我的结果:

  • SQL查询1:

    -------  -------  ----  ---  ----------------------------  ----  --
    Stephen  Jiang    1011  268  North American Sales Manager  NULL  1
    Amy      Alberts  1013  284  European Sales Manager        NULL  1
    Syed     Abbas    1012  288  Pacific Sales Manager         Mr.   1
    
  • SQL查询2:

    ---  ---  -----------  ----------------------------  ---  --
    268  268  Gary Drury   North American Sales Manager  Mr.  1
    284  284  John Emory   European Sales Manager        Mr.  1
    288  288  Julie Estes  Pacific Sales Manager         Ms.  1
    

2 个答案:

答案 0 :(得分:1)

我能看到的唯一不同之处是:

where 
   e.Title like '%Sales Manager%'

而且:

Where 
 e.Title LIKE '%Manager%'
    AND
  e.Title LIKE '%Sales%'

第一个查询说明了为我输出的所有标题'%Sales Manager%'可以用于此输出:

Account Sales Manager
some Sales Manager
Sales Manager something else

第二个问题是说给我带来'%Manager%'和'%Sales%'的所有标题,这样你就可以了:

Sales Account Manager
some Sales some Manager some 
Sales Manager some else thing
Manager Sales

此连接不能正确

INNER JOIN Person.Contact c
    ON e.EmployeeID = c.ContactID

你的意思是:

INNER JOIN Person.Contact c
        ON e.ContactID= c.ContactID

答案 1 :(得分:1)

第一个查询将匹配子字符串“Sales Manager”所在的行。但第二个也可以匹配像“销售部门经理”这样的行。我的意思是第二个并不关心srting中单词的位置。

我认为第一次查询的结果是第二次查询结果的一个子集。

<强>更新 你在JOIN子句中使用不同的列,所以你得到不同的结果是正常的。