选择此选项可使用替换函数/ORACLE SQL 联接两个表



我有两个表:

Table_promo
Name   | Code    | 
Promo1 | 123     |
Promo2 | 124     |
Promo3 | 125     |

第二个表:

Table_invoice
Index  | Promo   | Price
1155   | 123+    | 1.25
2754   | 125K    | 3.26
2378   | 124+    | 2.28

我需要选择,这将给我table_invoice的每个索引以及table_promo促销的名称。问题是,在table_invoice促销号码的末尾有字符"+"或"K",所以我不能简单地比较两个表之间的促销代码。我尝试编写这样的选择子查询:

(select name from table_promo where table_promo.code=to_number(replace(replace(table_invoice.promo,'+',''),'K','')

将每个"+"和"K"替换为空字符"它不起作用,我收到错误

ORA-01427: single-row subquery returns more than one row

我认为问题在于转换 table_invoice.promo 和 table_promo.code 中的数据我尝试转换两种to_number,to_char并使用"喜欢"之间的克劳苏尔,没有任何帮助我确信还有另一种方法可以从此选择中的 table_invoice.promo 中删除此字符并将其与 table_promo.code 进行比较,但无法在互联网上获取任何信息

只需使用连接:

select . . .
from table_promo p join
     table_invoice i
     on i.promo = p.code || '+';

我认为您希望相反来处理+K

select . . .
from table_promo p join
     table_invoice i
     on p.promo like i.promo || '_'

同时,您应该修复数据模型。 与code的连接应使用确切的代码。 您可以将+K信息存储在单独的列中。

select *
from         table_promo p 
       join  table_invoice I
       on    regexp_substr (I.promo,'^d+') =
             P.code

相关内容

  • 没有找到相关文章

最新更新