在这里练习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%"
只为一个案例提供正确的输出。我是否想念一些东西,或者是学校的问题?
答案 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
答案 2 :(得分:0)
在没有看到您的实际数据的情况下,我无法确定您的案例中实际发生了什么,但您的第一个查询存在缺陷:
Customers.ContactName LIKE "%"+Employees.FirstName+"%"
这只会返回Customers.ContactName
包含整个 Employees.FirstName
的记录。
例如,如果你有一个Employees.firstName
=“Jonathan”,那么它只会返回有Customers.ContactName
的记录,其中包含整个值“Jonathan”,而不仅仅是其中的一部分