我有一个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
请告知。
答案 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