Php 如何在oracle查询中将字符与匹配

Php 如何在oracle查询中将字符与匹配,php,sql,oracle,Php,Sql,Oracle,事件表 我有如下事件表,我需要匹配客户表中的客户列表。在甲骨文中我如何做到这一点 INCIDENT_ID |CLIENTS_LIST | ------------|-----------------| 56 |A001##A05M##A0AS | 客户表 我试图将公司ID与客户列表匹配,但没有结果 试问 预期产量 你可以用 你可以用 我发现有一个设计问题,您应该始终将每个值保存在单独的列中,或者保存在具有1对多关系的单独表中 现在,您将无法进行有效的查询,或者至少无法

事件表

我有如下事件表,我需要匹配客户表中的客户列表。在甲骨文中我如何做到这一点

INCIDENT_ID |CLIENTS_LIST     |
------------|-----------------|
56          |A001##A05M##A0AS |
客户表

我试图将公司ID与客户列表匹配,但没有结果

试问

预期产量

你可以用

你可以用


我发现有一个设计问题,您应该始终将每个值保存在单独的列中,或者保存在具有1对多关系的单独表中

现在,您将无法进行有效的查询,或者至少无法进行尽可能有效的查询。考虑到这一点,您可以将其与此查询结合使用,这是非常不高效的,但它应该可以工作:

SELECT *
FROM incidentTable t, clientTable c
WHERE t.IncidentId = 56 AND '#' || t.ClientList || '#' LIKE '%#' || c.CompanyId || '#%' 

我发现有一个设计问题,您应该始终将每个值保存在单独的列中,或者保存在具有1对多关系的单独表中

现在,您将无法进行有效的查询,或者至少无法进行尽可能有效的查询。考虑到这一点,您可以将其与此查询结合使用,这是非常不高效的,但它应该可以工作:

SELECT *
FROM incidentTable t, clientTable c
WHERE t.IncidentId = 56 AND '#' || t.ClientList || '#' LIKE '%#' || c.CompanyId || '#%' 

我怀疑,如果您从事件中执行SELECT REPLACECLIENTS_LIST,,,则无法返回与CLIENT.COMPANYID匹配的值。Oracle不会神奇地解析字符串并将其分解,无论是通过逗号还是磅符号或其他方式。你可能想看看。祝您好运。我怀疑如果您从事件中执行SELECT REPLACECLIENTS_LIST,,,您将无法返回与CLIENT.COMPANYID匹配的值。Oracle不会神奇地解析字符串并将其分解,无论是通过逗号还是磅符号或其他方式。你可能想看看。祝你好运。你能告诉我如何运行+1:吗?请注意,这是基于公司ID的一致命名策略。如果可能有CompanyId,其中一个的前缀是另一个的值,例如A10和A101,那么这需要是和| | t.ClientList | |类似“%”| | | c.CompanyId | | |“%”是的,concation操作符正确我不清楚其中一个。你能在这张桌子上加两张桌子吗query@symcbean是的,你是对的,我去修改我的answer@QuestionUser请参阅我在答案中提供的关于交叉连接的链接,交叉连接用于我的查询,因为,在中,from子句将第一个表中的每个记录与第二个表中的所有记录连接起来。您能告诉我如何运行+1:吗?请注意,这是基于CompanyID的一致命名策略。如果可能有CompanyId,其中一个的前缀是另一个的值,例如A10和A101,那么这需要是和| | t.ClientList | |类似“%”| | | c.CompanyId | | |“%”是的,concation操作符正确我不清楚其中一个。你能在这张桌子上加两张桌子吗query@symcbean是的,你是对的,我去修改我的answer@QuestionUser请参阅我在答案中提供的关于交叉联接的链接,交叉联接用于我的查询,因为在from子句中,将第一个表中的每个记录与第二个表中的所有记录联接在一起。
BO_NAME               |COMPANYID
----------------------|---------
Test1                 |A001     
Test2                 |A0AS     
Test3                 |A05M      
with inc(INCIDENT_ID,CLIENTS_LIST) as (select 56, 'A001##A05M##A0AS' from dual),
     Client(BO_NAME,COMPANYID) as 
     (select 'Test1','A001' from dual union all
      select 'Test2','A0AS' from dual union all
      select 'Test3','A05M' from dual union all
      select 'Test4','A0BT' from dual )

select * 
  from inc, client
 where instr(clients_list,companyid) > 0


INCIDENT_ID CLIENTS_LIST     BO_NAME COMPANYID
----------- ---------------- ------- ---------
         56 A001##A05M##A0AS Test1   A001      
         56 A001##A05M##A0AS Test2   A0AS      
         56 A001##A05M##A0AS Test3   A05M  
SELECT *
FROM incidentTable t, clientTable c
WHERE t.IncidentId = 56 AND '#' || t.ClientList || '#' LIKE '%#' || c.CompanyId || '#%'