连接具有不同值前缀的表

时间:2018-08-25 22:02:15

标签: mysql join

我正在尝试join两个表,但问题是在第二个表中,与表1相同的值带有前缀(此表是在 opencart < / strong>安装-演示数据):

Table 1: category
 -----------------------------
| category_id | category_name |
|-----------------------------|
|     1       |  Components   |
|     2       |    Laptops    |


Table 2: seo_url
 ------------------------------------------
| seo_url_id  |    query      |   keyword  |
|------------------------------------------|
|     35      | category_id=1 | components |
|     78      | category_id=2 | laptops    |

因此,类别的ID在表1 category_id列中,它是一个数字,但在表2 中,它在{{1 }},其前缀为query,然后为ID category_id=(如果类别笔记本电脑x为2)。

有人可以帮助我了解在这种情况下如何加入此表吗?

到目前为止,我一直在尝试像这样添加x +:

category_id=

我尝试SELECT a.id, a.category_name, b.query FROM category AS a INNER JOIN seo_url AS b ON a.category_id = 'category_id=' + b.query

PSS也有ON 'category_id=' + a.category_id,所以我不知道我是否可以使用product_id,但是我在考虑它,对其进行了搜索,但找不到使它起作用的方法。 / p>

谢谢! D:

2 个答案:

答案 0 :(得分:1)

将嵌套的REVERSE函数与+ 0一起使用以自动广播“解析”整数。

查询

SELECT
 REVERSE(REVERSE('category_id=2') + 0)
UNION ALL 
SELECT 
 REVERSE(REVERSE('category_id=21') + 0)

结果

| REVERSE(REVERSE('category_id=2') + 0) |
|---------------------------------------|
|                                     2 |
|                                    21 |

参见演示http://sqlfiddle.com/#!9/340e01/530

在查询中使用它。

查询

SELECT a.category_id, a.category_name, b.query 
FROM category AS a
INNER JOIN seo_url AS b
ON a.category_id = REVERSE(REVERSE(b.query) + 0)

结果

| category_id | category_name |         query |
|-------------|---------------|---------------|
|           1 |    Components | category_id=1 |
|           2 |       Laptops | category_id=2 |

参见演示http://sqlfiddle.com/#!9/ef5781/1

答案 1 :(得分:1)

在MySQL中,使用可以附加字符串和数字的函数CONCAT(...),并且该函数与该数据库的不同版本兼容。

您的固定查询为:

SELECT a.id, a.category_name, b.query 
FROM category AS a
INNER JOIN seo_url AS b
ON CONCAT('category_id=', a.category_id) = b.query;

您的表seo_url在字段query的值中已经有'category_id =',因此您无需附加它。

此外,建议您使用更具代表性的名称来命名表别名,而不要使用ab

希望这可以帮助您解决问题!