我正在使用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
答案 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子句中使用不同的列,所以你得到不同的结果是正常的。