需要一个MySQL加入就好

时间:2014-10-08 03:35:50

标签: mysql join

我有一个3表连接,其中一个连接需要在LIKE上。

以下是包含结果的表格。第3个表,apps_channel_titles为apps_freeform_form_entries_58为ff,只有1行,因为它是一个复选框数组。

apps_channel_titles as t
    Title 1
    Title 2
    Title 3

apps_channel_data as d  
    545|~|Title 1
    546|~|Title 2
    547|~|Title 3

***apps_freeform_form_entries_58 as ff
    546|~|Title 2
    547|~|Title 3

我在下面使用的查询不起作用。我在没有CONCAT的情况下尝试过,但也没有运气。

SELECT d.entry_id, 
       t.title, 
       d.field_id_95, 
       ff.form_field_558 
FROM   ((apps_channel_data AS d 
         LEFT JOIN apps_freeform_form_entries_58 AS ff 
                ON d.entry_id LIKE CONCAT('%', ff.form_field_558, '%')) 
        LEFT JOIN apps_channel_titles AS t 
               ON d.entry_id = t.entry_id) 
WHERE  t.channel_id = 37 
ORDER  BY t.title ASC 

这些是我从上述查询中获得的结果。

    entry_id  | title     |  field_id_95    |  form_field_558
    545       | Title 1   |  545|~|Title 1  |  NULL
    546       | Title 2   |  546|~|Title 2  |  NULL
    547       | Title 3   |  547|~|Title 3  |  NULL

我想要的是结果如下所示

    entry_id  |  title     |  field_id_95   |  form_field_558
    545       |  Title 1   |  545|~|Title 1 |  NULL
    546       |  Title 2   |  546|~|Title 2 |  546|~|Title 2
                                               547|~|Title 3
    547       |  Title 3   |  547|~|Title 3 |  546|~|Title 2
                                               547|~|Title 3

感谢任何帮助。

由于

Peter T

1 个答案:

答案 0 :(得分:0)

它看起来不像这个谓词

    d.entry_id LIKE CONCAT('%',ff.form_field_558,'%')

将返回TRUE,因为entry_id似乎是一个整数值(值545546547)并且您正在与form_file_558进行匹配,并且包含值,例如'546|~|Title 2',以便有效

    '546' LIKE '%546|~|Title 2%'

也许你打算做这样的事情:

    '546|~|Title 2' LIKE '%546%'

另外,WHERE子句中的谓词

    t.channel_id =37

否定了"外表" LEFT JOIN。 LEFT JOIN操作指定从左侧返回行,以及右侧表格中的匹配行(在本例中为t),对于没有匹配的行,将为t返回一行NULL值。 WHERE子句中的谓词实质上是t.channel_id IS NOT NULL,它将排除未找到匹配项的任何行。

进行一些调整后,我们可以返回结果集,如:

entry_id  title    field_id_95    form_field_558  
--------  -------  -------------  --------------
     545  Title 1  545|~|Title 1  (NULL)
     546  Title 2  546|~|Title 2  546|~|Title 2
     547  Title 3  547|~|Title 3  547|~|Title 3

但是你要返回的其他行,他们不会匹配"来自其他两个表格的任何内容。