我有两个表:
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