我有两张桌子:
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进行比较,但无法在互联网上获取任何信息
答案 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
信息存储在单独的列中。