Mysql就像在内连接中查询一样

时间:2016-08-21 16:18:34

标签: mysql sql

我有一个mysql查询,但它返回0条记录。我不确定为什么它会返回零记录。

这是MySql查询。

+ 1

技能表中的数据是这样的。

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

Job表中的数据是这样的。

skills_id   skills_name
        1   It support
        2   IT technician
        4   sales

请告知。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

您的on条款错误。 like keyword并未说“它是否相似”,而是“它是否包含X”(并且使用%可以指定后续和/或之前的内容无关紧要)< / p>

此外,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