Sql 就像在内部连接中一样';行不通

Sql 就像在内部连接中一样';行不通,sql,Sql,在这里练习SQL时,我为自己编写了一个任务—需要使用内部联接组成一个表,该表将包含CustomerID、EmployeeID、客户的ContactName以及员工的姓和名,其中员工的名包含在客户的contact name中。以下内容没有给出输出: SELECT DISTINCT Customers.CustomerID, Customers.ContactName AS CustomerContactName, Employees.EmployeeID, Employees.FirstName

在这里练习SQL时,我为自己编写了一个任务—需要使用内部联接组成一个表,该表将包含CustomerID、EmployeeID、客户的ContactName以及员工的姓和名,其中员工的名包含在客户的contact name中。以下内容没有给出输出:

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。