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

'coancat( '%'、a.skills_name、 '%')のようなb.keywordsに' –

+0

期待どおりの出力が得られますか? – jophab

+0

@PaulSpiegel溶液が働いた。ありがとうポール。答えに投稿してください。 – Ironic

答えて

2

=を使用するのと同じです。あなたはまた、使用することを検討すべきである(SELECT DISTINCT a.skills_name

- JOIN条件のためのあなたの擬似コードはb.keywords CONTAINS a.skills_name他はすでにあなたの代わりにGROUP BYの重複を削除するDISTINCTキーワードを使用することができます述べたように、あなたは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 

が必要である場合文字列に複数の値を格納する代わりに正規化されたスキーマ。あなたのケースでは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

は、参加のためのあなたの仕事のテーブルの列には、キーワード は(あなたが集計関数を持っていない場合は個別の使用)、あなたが好きで、グループで必要がないようだ場合にはプレースホルダ( "%")なしLIKEを使用

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

関連する問題