选择使用replace function / ORACLE SQL连接两个表

时间:2017-02-06 18:23:23

标签: sql oracle

我有两张桌子:

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

我需要select,它会给table_invoice中的每个索引以及table_promo的promo名称。问题是在table_invoice中有chars' +'或者' 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和使用' like'之间的关系,没有任何帮助 我确信还有另一种方法可以从此select中的table_invoice.promo中删除这些字符,并将其与table_promo.code进行比较,但无法在互联网上获取任何信息

2 个答案:

答案 0 :(得分:1)

Select *
From table_promo p
      Table_invoice I
       On regexp_substr (I.promo,'^\d+') =
    P.code

答案 1 :(得分:0)

只需使用连接:

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信息存储在单独的列中。