Sql 就像在内部连接中一样';行不通
在这里练习SQL时,我为自己编写了一个任务—需要使用内部联接组成一个表,该表将包含CustomerID、EmployeeID、客户的ContactName以及员工的姓和名,其中员工的名包含在客户的contact name中。以下内容没有给出输出:Sql 就像在内部连接中一样';行不通,sql,Sql,在这里练习SQL时,我为自己编写了一个任务—需要使用内部联接组成一个表,该表将包含CustomerID、EmployeeID、客户的ContactName以及员工的姓和名,其中员工的名包含在客户的contact name中。以下内容没有给出输出: SELECT DISTINCT Customers.CustomerID, Customers.ContactName AS CustomerContactName, Employees.EmployeeID, 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 "%"+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%"
仅为一种情况提供正确的输出。我是错过了什么还是学校的问题?这很有效
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
看起来你必须明确地告诉它这是一个内部连接。虽然这不是必须的。那是给你的 在没有看到您的实际数据的情况下,我无法确定您的案例中实际发生了什么,但您的第一个查询中存在一个缺陷:
Customers.ContactName LIKE "%"+Employees.FirstName+"%"
这将仅返回Customers.ContactName
包含整个Employees.FirstName
的记录
例如,如果您有一个
Employees.firstName
=“Jonathan”,那么它将只返回包含整个值“Jonathan”的Customers.ContactName
,而不仅仅是其中的一部分的记录。首先要注意的是,如果名字是Janette
,那么这两个查询是不可比的,联系人名称为Janet Jackson
,则这两个值的统计值类似于“%Janet%”,但Janet Jackson
不包含Janet
,因此不满足联接条件
其次,我认为应该对文本使用单引号,而不是双引号,例如“%”Employees.FirstName+“%”
我不确定哪个引擎正在运行,但通过上述更改,并将JOIN
更改为internal JOIN
,我得到了相同的结果:
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+'%';
将on子句更改为下文..on Customers.ContactName LIKE(选择“%”+Employees.FirstName+“%”)我认为您需要在每个希望联接的表中提供数据示例。查询本身看起来应该可以工作,因此问题可能是您的数据这两个查询不可比较,如果名字是
Janette
,联系人是JanetJackson
,那么这两个值都满足的要求,比如“%Janet%”
,但是JanetJackson
不包含Janette
,所以连接条件不满足。mhn,这个也不起作用。w3schools似乎有一些限制。是的,这正是我想要得到的——例如,如果有一名员工的名字是FirstName=“Janet”(实际上是有的),而客户的名字是ContactName=“Janete Limeira”——这将是一个匹配。我使用了您提供的链接。它看起来确实很脆弱,但我添加了结果集,以向您展示,有了持久性,它确实有效。这真的很奇怪。尽管如此,我还是接受了你的回答。好吧,我已经在另一个浏览器中打开了这个页面,终于让这个查询起作用了。谢谢这对我不起作用。我的mysql服务器版本是5.6.25。