如何在一个查询中使用Concat()和子字符串?

时间:2019-04-05 13:55:44

标签: mysql sql mysql-workbench

出于提问的目的,我将使用最少的数据作为示例。

我有一个名为table1的表和一个名为test的列,如下所示:

test
5012 

我可以使用以下查询在列test的结果之前在后面添加一个额外的零

SELECT CONCAT('0',test) as x from table1

这是查询的结果:

结果表:table1

  x
05012

现在我有另一个名为table2的表,如下所示:

test    test2
05012     1

我的问题是,如何基于上面的查询将两个表连接在一起,并将table1test2中的列table2进行连接?确保两个表中的列test的前4个字符都匹配?

这是表1的样子:

 Afterquery
  050121

3 个答案:

答案 0 :(得分:1)

我认为这应该是解决方案。您需要在concattable1

之间的联接中使用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);