Tsql AdventureWorks SQL冲突结果问题
我正在使用AdventureWorks示例数据库-我们正在运行SQL Server 2008R2,因此我假设这是AdventureWorks的版本(我具有只读访问权限)。我试图得到一份销售经理的名单,这样我就可以确定两个员工/经理的关系。 我得到了两组三个不同名字的人,他们有相同的职位,他们的CurrentFlag设置为1(活动),查询略有不同。我注意到一个结果组具有相同的contactID和employeeID,但我不确定这可能表明什么 所以问题是:为什么我在这两个问题上得到了完全不同的结果?我想每个查询都会得到六个结果——查询与员工表标题匹配Tsql AdventureWorks SQL冲突结果问题,tsql,sql-server-2008-r2,adventureworks,Tsql,Sql Server 2008 R2,Adventureworks,我正在使用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中得到了正确的结果。我想我以前是设法把这些表格拼凑在一起的,但当然之后会得到不规则的结果。