我正在使用AdventureWorks示例DB -我们运行的是SQLServer2008R2,所以我假设这是AdventureWorks的版本(我有只读访问权限)。我试图得到销售经理的名单,这样我就可以确定几个员工/经理的关系。我得到了两组名不同的人,他们的CurrentFlag设置为1 (active),查询略有不同。我确实注意到一个结果组具有相同的contactID和employeeID,但我不确定这可能表明什么。
所以问题是:为什么我得到的结果与这两个问题完全不同?我认为每个查询都会得到6个结果--查询是匹配雇员表标题的。
选择c.FirstName、c.LastName、c.ContactID、e.EmployeeID、e.Title、c.Title、e.CurrentFlag从Person.Contact c内部连接HumanResources.Employee e on c.ContactID = e.ContactID,其中e.Title喜欢'%Sales %‘
选择e.EmployeeID,(c.FirstName +‘’+ c.LastName)作为‘名字和姓’,e.Title从HumanResources.Employee e内部连接Person.Contact c ON e.EmployeeID = c.ContactID,其中e.Title喜欢'%Manager%‘,e.Title类似'%Sales%’按e.EmployeeID;
更新:这是我的结果:
发布于 2012-04-06 16:35:05
我能看到的唯一不同之处是:
where
e.Title like '%Sales Manager%'这是:
Where
e.Title LIKE '%Manager%'
AND
e.Title LIKE '%Sales%'第一个查询说,为ex提供所有具有'%Sales Manager%'的标题--这个输出:
Account Sales Manager
some Sales Manager
Sales Manager something else第二个问题是,把所有有'%Manager%‘和'%Sales%'的标题都给我,这样你就可以让ex拥有:
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发布于 2012-04-06 16:35:19
第一个查询将匹配子字符串"Sales“存在的行。但第二种方法也可以与“销售经理”等行相匹配。我的意思是,第二个人不关心这个词的位置。
我认为第一次查询的结果是第二次查询结果的子集。
UPDATE在JOIN子句中使用不同的列,因此得到不同的结果是正常的。
https://stackoverflow.com/questions/10046306
复制相似问题