MYSQL LEFT加入'LIKE'

时间:2011-10-04 03:40:25

标签: mysql left-join sql-like

我正在尝试加入两个表格。问题是其中一个表实际上在单元格内部有一个以逗号分隔的列表。我需要加入'csv cell'。使用我的沙拉为例我希望培根加入培根,土耳其并给我一个 cobb_salad

   SELECT tbl_a.item, tbl_b.item, tbl_b.salad 
     FROM tbl_a
LEFT JOIN tbl_b
       ON  tbl_a.item LIKE CONCAT('%', tbl_b.item, '%')

我尝试了上面的示例和其他一些变量。我意识到这不会是一个高效的查询。问题是底层数据集早于我。幸运的是我只需要运行一次查询。

Expected Result
+--------+------------+
| item   |   salad    |
+--------+------------|
|  ham   | chef_salad |
| bacon  | cobb_salad |
| turkey | cobb_salad |
+---------------------+


tbl_a 
+------+
| item |
+------+
|bacon | 
| ham  | 
|turkey|
+------+  

tbl_b
+--------------+------------+
|     item     |  salad     |
+--------------+------------+
| ham          | chef_salad |
| bacon,turkey | cobb_salad |
+--------------|------------+

1 个答案:

答案 0 :(得分:1)

注意:

我在你的数据库中显示,你的表中有很多space characters。 在插入数据库之前,请尝试修剪它。 例如:
发件人:
ham => [space]ham[space]

ham => [no-space]ham[no-space]
希望你明白我说的话。


您可以尝试:
它对我有用:

mysql> use test;
Database changed
mysql> SELECT tbl_a.item as item_a, tbl_b.item as item_b, tbl_b.salad
    -> FROM tbl_a LEFT JOIN tbl_b 
    -> ON FIND_IN_SET(tbl_a.item, tbl_b.item);
+--------+--------------+------------+
| item_a | item_b       | salad      |
+--------+--------------+------------+
| bacon  | bacon,turkey | cobb_salad |
| ham    | ham          | chef_salad |
+--------+--------------+------------+
2 rows in set (0.00 sec)

更新

这是我的表格:

mysql> select * from tbl_a;
+-------+
| item  |
+-------+
| bacon |
| ham   |
+-------+

mysql> select * from tbl_b;
+--------------+------------+
| item         | salad      |
+--------------+------------+
| bacon,turkey | cobb_salad |
| ham          | chef_salad |
+--------------+------------+