Tsql AdventureWorks SQL冲突结果问题

Tsql AdventureWorks SQL冲突结果问题,tsql,sql-server-2008-r2,adventureworks,Tsql,Sql Server 2008 R2,Adventureworks,我正在使用AdventureWorks示例数据库-我们正在运行SQL Server 2008R2,因此我假设这是AdventureWorks的版本(我具有只读访问权限)。我试图得到一份销售经理的名单,这样我就可以确定两个员工/经理的关系。 我得到了两组三个不同名字的人,他们有相同的职位,他们的CurrentFlag设置为1(活动),查询略有不同。我注意到一个结果组具有相同的contactID和employeeID,但我不确定这可能表明什么 所以问题是:为什么我在这两个问题上得到了完全不同的结果?

我正在使用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%'
    
    -------  -------  ----  ---  ----------------------------  ----  --
    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:

    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;
    
    ---  ---  -----------  ----------------------------  ---  --
    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
    
更新:以下是我的结果:

  • 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%'
    
    -------  -------  ----  ---  ----------------------------  ----  --
    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:

    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;
    
    ---  ---  -----------  ----------------------------  ---  --
    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
    

    • 我能看到的唯一差别是:

      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
      

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

      我相信第一个查询的结果是第二个查询结果的子集

      更新
      您在JOIN子句中使用了不同的列,因此得到不同的结果是正常的。

      这两个查询似乎相同…是的,很抱歉,我没有意识到我在本地复制了一个,而另一个在RDC上。。。更新。如果您添加了两个表的定义(因此我们可以看到FKs),这会有所帮助,但很明显,您会得到不同的结果。关于的
      子句是不同的。您的所有员工都有一个
      EmployeeID
      和一个
      ContactID
      ,这两个查询使用这些不同列中的每一列进行联接。不同的栏目,不同的含义。谢谢!我现在看到我错过了阅读我的FK关系,现在我从contactID中得到了正确的结果。我想我以前是设法把这些表格拼凑在一起的,但当然之后会得到不规则的结果。