2012-04-06 80 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子句中使用了不同的列,所以正常情況下會得到不同的結果。