mysql - REGEX 由子查询开始

标签 mysql regex

这是我刚刚进行的查询,它工作正常

select 
    sum(IF(l.bandera='DEBITO',l.valor,0)) totdebito, 
    sum(IF(l.bandera='CREDITO',l.valor,0)) totcredito ,n.nit_ID 
    from lineaasiento l left join clientesam c on c.Dk=l.clientesmayor_OID 
    left join proveedores p on p.Dk=l.proveedor_OID left join empleado e on e.Dk=l.empleado_OID
    left join banco b on b.Dk=l.banco_OID left join cuentacontable cc on cc.Dk=l.cuentacontable_OID
    left join nit n on n.Dk=coalesce(c.nit_OID,p.nit_OID,e.nit_OID,b.nit_OID,null) 
    where (timefcontable between '2013-01-01' and '2013-12-31') and 
    estadolinea_OID in (Select Dk from estadoasiento where codigo!=4) and
    cc.cuentacontable_ID REGEXP  '^5'
    group by n.Dk

但是,我现在有一个问题...我需要 REGEX '^5' 是这样的子查询句子

select 
        sum(IF(l.bandera='DEBITO',l.valor,0)) totdebito, 
        sum(IF(l.bandera='CREDITO',l.valor,0)) totcredito ,n.nit_ID 
        from lineaasiento l left join clientesam c on c.Dk=l.clientesmayor_OID 
        left join proveedores p on p.Dk=l.proveedor_OID left join empleado e on e.Dk=l.empleado_OID
        left join banco b on b.Dk=l.banco_OID left join cuentacontable cc on cc.Dk=l.cuentacontable_OID
        left join nit n on n.Dk=coalesce(c.nit_OID,p.nit_OID,e.nit_OID,b.nit_OID,null) 
        where (timefcontable between '2013-01-01' and '2013-12-31') and 
        estadolinea_OID in (Select Dk from estadoasiento where codigo!=4) and
        cc.cuentacontable_ID REGEXP  (^a query that returns a lot of values and i need to get the elements that starts by this)
        group by n.Dk

可能吗?

最佳答案

用于构建您的正则表达式...

select
   '^(' || group_concat(my_value separator '|') || ')' as regex
from
   my_table

注意:group_concat 返回的结果有 1024 字节的限制。因此,如果您期望更大的结果,请在最终查询之前运行以下查询(见下文)。

set group_concat_max_len=2048 
<小时/>

最终查询

select
    sum(IF(l.bandera='DEBITO',l.valor,0)) totdebito,
    sum(IF(l.bandera='CREDITO',l.valor,0)) totcredito ,
    n.nit_ID           
from
    lineaasiento l 
left join
    clientesam c on c.Dk=l.clientesmayor_OID           
left join
    proveedores p on p.Dk=l.proveedor_OID 
left join
    empleado e on e.Dk=l.empleado_OID          
left join
    banco b on b.Dk=l.banco_OID 
left join
    cuentacontable cc on cc.Dk=l.cuentacontable_OID          
left join
    nit n on n.Dk=coalesce(c.nit_OID, p.nit_OID, e.nit_OID, b.nit_OID, null) 
inner join
    (select '^(' || group_concat(my_value separator '|') || ')' as regex from my_table) values          
where
    (
        timefcontable between '2013-01-01' and '2013-12-31'
    ) 
    and           estadolinea_OID in (
        Select
            Dk 
        from
            estadoasiento 
        where
            codigo!=4
    ) 
    and  cc.cuentacontable_ID REGEXP values.regex
group by
    n.Dk

关于mysql - REGEX 由子查询开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21587535/

相关文章:

javascript - js - 将 markdown 字符串(仅限粗体和斜体)解析为文本 + 样式 json 数组

python - 使用重复嵌套模式从文本文件中提取文本

regex - 使用正则表达式进行输入验证是一个好习惯吗?

regex - Sublime Text 正则表达式查找和替换

regex - 在 R 中列出 HTTP/FTP 服务器上的文件

php - 使用php编程更新mysql表中的字段值

sql - Mysql WHERE 子句中的文件名不返回任何内容

mysql - MySQL InnoDB 数据库可以有外列唯一性约束吗?

mysql - 计算 block 嵌套循环连接的成本

php - 您的 SQL 语法有错误;关于Mysql SQL注入(inject)