2015-07-16 6 views
0

Практика в SQL здесь http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_join Я составил задачу для себя - нужно составить таблицу, используя INNER JOIN, которая будет содержать CustomerID, EmployeeID, ContactName клиента и последние и первые данные сотрудника имена WHERE Имя сотрудника указано в контактном имени Клиента. Далее не дает выход:LIKE in INNER JOIN не работает

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%" 

дает правильный вывод только для одного случая. Я что-то пропустил или это проблема w3schools?

+0

Изменения в пункте ниже .. ON Customers.ContactName LIKE (выберите «%» + Employees.FirstName + '%') – mhn

+0

Думаю, вам нужно предоставить пример ваших данных в каждой таблице, которую вы ожидаете присоединиться. Сам запрос выглядит так, как будто он работает, поэтому, вероятно, проблема связана с вашими данными. –

+0

Два запроса не сопоставимы. Если имя было «Janette», а контактным именем было «Janet Jackson», то оба значения удовлетворяли 'LIKE '% Janet% '', но' Janet Jackson' не содержит 'Janette', поэтому условие соединения не выполняется. – GarethD

ответ

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 для вас!

+0

Не могу видеть, как он работает. Все равно никакого результата. – Nervosa

+0

Я использовал ссылку, которую вы предоставили. Это кажется очень flaky, но я добавил набор результатов, чтобы показать вам, что с настойчивостью он работает. –

+0

Это действительно очень странно. Тем не менее, я принимаю ваш ответ. – Nervosa

0

Не видя ваши фактические данные, я не могу быть уверен, что на самом деле происходит в вашем случае, но есть недостаток в первом запросе:

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

Это будет возвращать только записи, где Customers.ContactName содержит всегоEmployees.FirstName.

Например, если у вас есть Employees.firstName = «Jonathan», то он будет возвращать только записи, где есть Customers.ContactName, который содержит всю ценность «Джонатан», а не только ее часть.

+0

Да, это именно то, что я собираюсь получить - например. если есть Сотрудник с FirstName = «Janet» (на самом деле есть) и Клиент с ContactName = «Janete Limeira» - это будет совпадение. – Nervosa

1

Первое, что нужно отметить, что эти два запроса не являются сопоставимыми, если первое имя было Janette, и имя контакта было Janet Jackson, то оба значения Утоли LIKE '%Janet%', но Janet Jackson не содержит Janette, поэтому условие соединения не встретил.

Во-вторых, я думаю, вы должны использовать одинарные кавычки для литералов, а не двойные, например. '%' + Employees.FirstName + '%'.

Я не уверен, что двигатель w3schools работает, но с выше изменения, и изменения JOIN к INNER 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+'%'; 

enter image description here

Смежные вопросы