2012-04-06 30 views
1

我正在使用AdventureWorks示例数据库 - 我们正在运行SQL Server 2008R2,因此我假设这是AdventureWorks的版本(我拥有只读访问权限)。我试图获得一份销售经理名单,以便我可以确定一对夫妇与经理的关系。 我得到两组三名不同名字的人,他们的职位名称相同,CurrentFlag设置为1(有效),查询略有不同。我注意到一个结果组具有相同的contactID和employeeID,但我不确定这可能表示什么。AdventureWorks SQL冲突的结果问题

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

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

UPDATE:这是我的结果:

  • 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

2个查询看起来是一样的...... – 2012-04-06 16:31:48

+0

是的,抱歉,我没有意识到我在本地复制了一个,而另一个在RDC上......更新了。 – Volvox 2012-04-06 16:32:25

+0

如果您添加了2个表格的定义(所以我们看到FK),这很有帮助,但很明显,您为什么会得到不同的结果。 “ON”条款是不同的。 – 2012-04-06 16:35:48

回答

1

唯一diffrents我能看到的是这样的:

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 

而这种连接不能corrent

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

难道你我an:

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

谢谢!我现在看到,我错过了阅读我的FK关系,现在我从contactID获得了正确的结果。我想我以前一直在捣烂这些桌子,但当然会得到不规律的结果。 – Volvox 2012-04-06 17:59:34

+0

没问题。很高兴帮助:P – Arion 2012-04-06 18:21:57

1

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

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

UPDATE 您在JOIN子句中使用了不同的列,所以正常情况下会得到不同的结果。