2016-08-21 2 views
0

У меня есть запрос mysql, но он возвращает 0 записей. Я не уверен, почему он возвращает нулевую запись.Mysql как запрос во внутреннем соединении

Вот запрос MySql.

SELECT a.skills_name 
FROM skills a inner join job b 
ON a.skills_name like b.keywords 
GROUP BY a.skills_name 
ORDER BY a.skills_name ASC limit 15 

Данные в таблице навыков таковы.

skills_id skills_name 
     1 It support 
     2 IT technician 
     4 sales 

Данные в таблице работы представлены следующим образом.

sales, marketing 
IT Support, IT Head 

Просьба сообщить.

+1

'на b.keywords как coancat ('%', a.skills_name, '%')' –

+0

Можно ли дать ожидаемый результат? – jophab

+0

Решение @PaulSpiegel работало. Спасибо, Пол. Пожалуйста, опубликуйте это в ответ. – Ironic

ответ

2

Использование LIKE без заполнителей ("%") такой же, как с помощью =. Если псевдокод для условия JOIN является b.keywords CONTAINS a.skills_name, то вам нужно b.keywords LIKE coancat('%', a.skills_name, '%')

SELECT a.skills_name 
FROM skills a inner join job b 
    ON b.keywords LIKE coancat('%', a.skills_name, '%') 
GROUP BY a.skills_name 
ORDER BY a.skills_name ASC limit 15 

Как другие уже упоминалось вы можете использовать DISTINCT ключевое слово, чтобы удалить дубликаты вместо GROUP BY - (SELECT DISTINCT a.skills_name)

Вы должны также рассмотреть возможность использования нормализованная схема вместо хранения нескольких значений в столбце строки. В вашем случае job таблица будет выглядеть следующим образом:

id | keyword 
---------------- 
1 | sales 
1 | marketing 
2 | IT Support 
2 | IT Head 

Тогда ваш запрос будет:

SELECT DISTINCT a.skills_name 
FROM skills a inner join job b 
    ON b.keyword = a.skills_name 
ORDER BY a.skills_name ASC limit 15 
0

Ваша статья on неверна. like keyword не говорит «похоже ли это», но «содержит X» (и с помощью % вы можете указать, что не имеет значения, что произойдет после и/или до этого)

Кроме того, существует нет причин для group by. Использование group by - это когда вы хотите выполнить некоторые функции агрегации, такие как sum/count. Я предполагаю, что вы используете его здесь, чтобы получить каждое значение один раз. Для такого использования distinct

Используйте это:

SELECT a.skills_name 
FROM skills a 
join job b 
on lower(b.keywords) like ('%' + lower(a.skills_name) + '%') 
ORDER BY a.skills_name 
limit 15 
+0

Позвольте мне попробовать. Проголосовал. – Ironic

+0

еще нет запись возврат. любой совет. – Ironic

+0

Все еще не работает. Нет записей. – Ironic

1

Если задание столбца таблицы для соединения является слово Кажется, вам не нужно, как и группа по (используйте отличимым, если вы не имеете функцию агрегации)

SELECT distinct a.skills_name 
FROM skills a inner join job b ON a.skills_name = b.keywords 
ORDER BY a.skills_name ASC limit 15 
+0

Спасибо за ваш ответ. Проголосовал. – Ironic

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