MySQL 使用 LIKE 和子字符串连接两个表
MySQL JOIN two tables using LIKE and substrings
我一直在尝试将两个 MYSQL table 与包含公共子字符串的列连接起来。
我的第一个tabletrim_table
是一个子串及其id的数据集。每行包含一个 ID 和一个子字符串,例如“1717 WINTON DR”。
第二个 table wp_prop
包含一列 field_313
,该列可能包含在第一个 table 中找到的子字符串。 field_313 的示例值为 "THE SARGENT III @ 1717 WINTON DR"
以下是我为加入两个 tables 而制定的查询:
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, '%')
遗憾的是,查询没有 return 任何行。我已将查询分解为不同的部分以验证它们是否有效。
通过执行以下查询可以确定子字符串数据集 return 是正确的行:
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
table 是否包含与我在上面发布的示例类似的子字符串:
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"
您刚刚在 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, '%')
我一直在尝试将两个 MYSQL table 与包含公共子字符串的列连接起来。
我的第一个tabletrim_table
是一个子串及其id的数据集。每行包含一个 ID 和一个子字符串,例如“1717 WINTON DR”。
第二个 table wp_prop
包含一列 field_313
,该列可能包含在第一个 table 中找到的子字符串。 field_313 的示例值为 "THE SARGENT III @ 1717 WINTON DR"
以下是我为加入两个 tables 而制定的查询:
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, '%')
遗憾的是,查询没有 return 任何行。我已将查询分解为不同的部分以验证它们是否有效。
通过执行以下查询可以确定子字符串数据集 return 是正确的行:
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
table 是否包含与我在上面发布的示例类似的子字符串:
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"
您刚刚在 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, '%')