我有一个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
答案 0 :(得分:0)
它看起来不像这个谓词
d.entry_id LIKE CONCAT('%',ff.form_field_558,'%')
将返回TRUE,因为entry_id似乎是一个整数值(值545
,546
,547
)并且您正在与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
但是你要返回的其他行,他们不会匹配"来自其他两个表格的任何内容。