使用临时列进行左连接

问题描述

我想对两个表执行 left join 但第二个表没有必需的列。 因此需要一个临时列(第二个表中的两个列值的连接)来进行左连接。

select a.name,a.number,b.id,b.sub_num
from tableA a left join
     tableB b
     on a.number = (select concat(id,'-',Cast(sub_num as varchar)) as tempcol from tableB);

显然这显示错误

SUBQUERY_MULTIPLE_ROWS: Scalar sub-query has returned multiple rows.

但我不需要这个 tempcol 显示在主查询中,也不需要在此处的任何表中将其保存为新列。

在临时列上进行左连接的更好方法是什么?

解决方法

您不需要 join 的子查询。只需使用表达式:

select a.name,a.number,b.id,b.sub_num
from tableA a left join
     tableB b
     on a.number = concat(id,'-',sub_num);

如果您愿意,可以使用子查询:

select . . .
from tableA a left join
     (select b.*,concat(id,sub_num) as tempcol
      from tableB b
     ) b
     on a.number = b.tempcol;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...