出于提问的目的,我将使用最少的数据作为示例。
我有一个名为table1
的表和一个名为test
的列,如下所示:
test
5012
我可以使用以下查询在列test
的结果之前在后面添加一个额外的零:
SELECT CONCAT('0',test) as x from table1
这是查询的结果:
结果表:table1
x
05012
现在我有另一个名为table2
的表,如下所示:
test test2
05012 1
我的问题是,如何基于上面的查询将两个表连接在一起,并将table1
与test2
中的列table2
进行连接?确保两个表中的列test
的前4个字符都匹配?
这是表1的样子:
Afterquery
050121
答案 0 :(得分:1)
我认为这应该是解决方案。您需要在concat
和table1
table2
SELECT CONCAT('0', table1.test, table2.test2) AS Afterquery
FROM table1
INNER JOIN table2
ON CONCAT('0',table1.test) = table2.test
答案 1 :(得分:1)
我很好奇您为什么不简单使用table2
?
select concat(t2.test, t2.test2) as afterquery
from table2 t2;
table1
似乎没有发挥作用。
如果要用table2
过滤table1
中的值,可以使用exists
:
select concat(t2.test, t2.test2) as afterquery
from table2 t2
where exists (select 1
from table1 t1
where t2.test = concat('0', t1.test)
);
您可以将其表示为join
:
select concat(t2.test, t2.test2) as afterquery
from table2 t2 join
table1 t1
on t2.test = concat('0', t1.test);
如果要从两个表中获取列,这很有用-但这不是回答问题的必要。另一方面,如果存在多个匹配项,则存在重复的风险。
答案 2 :(得分:0)
与子查询略有不同的方法:
select concat(concat_test, test2) test_results
from
(select concat('0', test) concat_test from table1) table_alias
join
table2 on substring(concat_test,1,4) = substring(test,1,4);