INNER JOIN中的LIKE不起作用

时间:2015-07-16 11:38:40

标签: sql

在这里练习SQL http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_join我为自己编写了一个任务 - 需要使用INNER JOIN编写一个表,该表包含CustomerID,EmployeeID,客户的ContactName以及员工的姓氏和名字WHERE员工的第一个名字名称包含在客户的联系人姓名中。以下内容未给出输出:

SELECT DISTINCT Customers.CustomerID, Customers.ContactName AS CustomerContactName, Employees.EmployeeID, Employees.FirstName AS EmployeeFirstName, Employees.LastName AS EmployeeLastName
FROM Customers
JOIN Employees
ON Customers.ContactName LIKE "%"+Employees.FirstName+"%"

虽然这个:

SELECT DISTINCT Customers.CustomerID, Customers.ContactName AS CustomerContactName, Employees.EmployeeID, Employees.FirstName AS EmployeeFirstName, Employees.LastName AS EmployeeLastName
FROM Customers
JOIN Employees
ON Customers.ContactName LIKE "%Janet%" AND Employees.FirstName LIKE "%Janet%"

只为一个案例提供正确的输出。我是否想念一些东西,或者是学校的问题?

3 个答案:

答案 0 :(得分:1)

这有效

SELECT DISTINCT Customers.CustomerID, Customers.ContactName AS  CustomerContactName, Employees.EmployeeID, Employees.FirstName AS EmployeeFirstName, Employees.LastName AS EmployeeLastName
FROM Customers
INNER JOIN Employees
ON Customers.ContactName LIKE "%"+Employees.FirstName+"%"

结果:

Number of Records: 3
CustomerID  | CustomerContactName   | EmployeeID    | EmployeeFirstName | EmployeeLastName
41          | Annette Roulet        | 9             | Anne              | Dodsworth 
67          | Janete Limeira        | 3             | Janet             | Leverling 
68          | Michael Holz          | 6             | Michael           | Suyama 

看起来你必须明确告诉它它是一个内连接。虽然这不是必要的。那就是w3schools为你服务!

答案 1 :(得分:1)

首先要注意的是,这两个查询不具有可比性,如果名字是var people = { '0' : { name: 'Tom', age: '18' }, '1' : { name: 'Rob', age: '22' }, '2' : { name: 'Carl', age: '19' } }; function personExists(id){ return people.hasOwnProperty(id); } document.body.innerHTML = personExists(2) // true + '<br>' + personExists(5); // false,联系人名称是Janette,则两个值都会Janet Jackson,但{ {1}}不包含LIKE '%Janet%',因此不符合连接条件。

其次,我认为你应该使用单引号用于文字,而不是加倍,例如'%'+ Employees.FirstName +'%'。

我不确定什么引擎w3schools正在运行,但是通过上述更改,并将Janet Jackson更改为Janette等同于我得到的结果:

JOIN

enter image description here

答案 2 :(得分:0)

在没有看到您的实际数据的情况下,我无法确定您的案例中实际发生了什么,但您的第一个查询存在缺陷:

Customers.ContactName LIKE "%"+Employees.FirstName+"%"

这只会返回Customers.ContactName包含整个 Employees.FirstName的记录。

例如,如果你有一个Employees.firstName =“Jonathan”,那么它只会返回有Customers.ContactName的记录,其中包含整个值“Jonathan”,而不仅仅是其中的一部分