2015-06-03 6 views
0

Я пытаюсь присоединиться к двум таблицам MYSQL со столбцами, которые содержат общую подстроку.MySQL ПРИСОЕДИНИТЬСЯ к двум таблицам, используя LIKE и подстроки

Моя первая таблица trim_table - набор данных подстрок и его идентификатор. Каждая строка содержит идентификатор и подстроку, такую ​​как «1717 WINTON DR».

Вторая таблица wp_prop содержит столбец field_313, который может содержать подстроку, найденную в первой таблице. В качестве примера значение field_313 будет «Сарджент III @ 1717 Уинтон DR»

Ниже приведен запрос, который я сформулировал, чтобы объединять обе таблицы:

SELECT *, wp_prop.id as prop_id, trim_table.id as post_id, wp_prop.field_313 
as prop_name, trim_table.trim_value as post_name 

FROM 
(SELECT id, TRIM(SUBSTRING(post_title, LOCATE('@', post_title)+1)) as trim_value 
FROM wp_nd333j_posts WHERE post_type="fplan") as trim_table 

JOIN 
wp_nd333j_wpl_properties as wp_prop 

ON trim_table.trim_value LIKE CONCAT('%', wp_prop.field_313, '%') 

К сожалению, запрос не возвращает ни одной строки. Я разложил запрос на разные части, чтобы убедиться, что они работают.

Он уверен, что подстрока набор данных возвращает правильные строки, выполнив следующий запрос:

SELECT * FROM 
(SELECT id, TRIM(SUBSTRING(post_title, LOCATE('@', post_title)+1)) as trim_value FROM wp_nd333j_posts WHERE post_type="fplan") as trim_table 

Я также могу подтвердить, что моя wp_prop таблица содержит подстроку, подобный пример, который я написал выше, выполнив следующие запрос:

SELECT * FROM wp_nd333j_wpl_properties as wp_prop WHERE field_313 LIKE "%1717 WINTON DR%" 

Я также проверил, что мой подстрока набор данных содержит нужный мне подстроку, выполнив запрос:

SELECT * FROM 
(SELECT id, TRIM(SUBSTRING(post_title, LOCATE('@', post_title)+1)) as trim_value FROM wp_nd333j_posts WHERE post_type="fplan") as trim_table 
WHERE trim_value = "1717 WINTON DR" 

ответ

1

Вы просто переключить свои поля в ON пункте:

ON wp_prop.field_313 LIKE CONCAT('%', trim_table.trim_value, '%') 

http://sqlfiddle.com/#!9/616a0/1

SELECT 
    trim_table.id as post_id, 
    trim_table.trim_value as post_name, 
    wp_prop.id as prop_id, 
    wp_prop.field_313 as prop_name 
FROM (
    SELECT id, 
     TRIM(SUBSTRING(post_title, LOCATE('@', post_title)+1)) as trim_value 
    FROM wp_nd333j_posts 
    WHERE post_type="fplan" 
) as trim_table 
INNER JOIN 
wp_nd333j_wpl_properties as wp_prop 
ON wp_prop.field_313 LIKE CONCAT('%', trim_table.trim_value, '%') 
+0

ха-ха, не могу поверить, что я пропустил это. Огромное спасибо! –

Смежные вопросы