簡體   English   中英

使用LEFT JOIN和LIKE mysql

[英]using LEFT JOIN and LIKE mysql

我在mysql查詢中有問題。 這是我的表格的樣子:

mysql> select username, specialty from users;
+----------+------------------+
| username | specialty        |
+----------+------------------+
| JinkX    | php, html, mysql |
| test1    | html             |
+----------+------------------+


mysql> select name, tags from tasks;
+----------------+------+
| name           | tags |
+----------------+------+
| fix front page | html |
+----------------+------+

當我嘗試執行以下查詢時,只有當專業完全等於標簽時,它才有效。 但我希望它能同時發揮作用

mysql> select tasks.name from users left join tasks on tasks.tags LIKE users.specialty where users.username = 'test1';
+----------------+
| name           |
+----------------+
| fix front page |
+----------------+

mysql> select tasks.name from users left join tasks on tasks.tags LIKE users.specialty where users.username = 'JinkX';
+------+
| name |
+------+
| NULL |
+------+

你做的like是錯誤的。

試試這個查詢:

select tasks.name 
from users left join tasks on users.specialty LIKE CONCAT('%',tasks.tags,'%') 
where users.username = 'JinkX'

這不是最好的方法,但應該有效

編輯:根據評論,還有另一種應該更好的方式

使用REGEXP:

select tasks.name 
from users left join tasks on users.specialty REGEXP CONCAT('(^|,) ?',tasks.tags,' ?($|,)') 
where users.username = 'JinkX'

好吧,你已經發現了將獨立值保存為逗號分隔字符串的痛苦。

如果可以,我建議您更改數據結構,從用戶表中獲取專業列,並創建一個新的user_specialty表,該表具有users.usernametasks.tags外鍵。

+----------+------------------+
| username | tag              |
+----------+------------------+
| JinkX    | php              |
| JinkX    | html             |
| JinkX    | mysql            |
| test1    | html             |
+----------+------------------+

你需要find_in_set函數。 把它放在你的where子句中:

FIND_IN_SET(task.tags,users.specialty)

(參考)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM