美文网首页
针对不同情况查询不同的表封装为一个字段

针对不同情况查询不同的表封装为一个字段

作者: 萌新_小白 | 来源:发表于2019-02-28 10:30 被阅读0次

针对不同情况查询不同的表封装为一个字段

需求

现有一个表A,我们要根据表A里的字段type的值来决定是关联查询表B还是表C或是表D里的某个字段。

实现

select 
(case A.type
    when 1 then B.name
    when 2 then CONCAT(C.name,E.name)
    when 3 then D.name
end) as name
from A
left join B on (A.xx_id = B.id and A.type = 1)
left join C on (A.xx_id = C.id and A.type = 2)
left join D on (A.xx_id = D.id and A.type = 3)
left join E on (C.xx_id = E.id and A.type = 2)

其中case类似我们代码里的的switch的功能。

进阶

对于我们上边自定义的字段name支持模糊查询

方法一:

select 
(case A.type
    when 1 then B.name
    when 2 then CONCAT(C.name,E.name)
    when 3 then D.name
end) as name
from A
left join B on (A.xx_id = B.id and A.type = 1)
left join C on (A.xx_id = C.id and A.type = 2)
left join D on (A.xx_id = D.id and A.type = 3)
left join E on (C.xx_id = E.id and A.type = 2)
where   (case A.type
    when 1 then B.name
    when 2 then CONCAT(C.name,E.name)
    when 3 then D.name
end) like '%***%'

方法二:

select * 
from 
    (select 
        (case A.type
            when 1 then B.name
            when 2 then CONCAT(C.name,E.name)
            when 3 then D.name
            end) as name
      from A
        left join B on (A.xx_id = B.id and A.type = 1)
        left join C on (A.xx_id = C.id and A.type = 2)
        left join D on (A.xx_id = D.id and A.type = 3)
        left join E on (C.xx_id = E.id and A.type = 2)) as Q
where Q.name like '%**%'

相关文章

  • 针对不同情况查询不同的表封装为一个字段

    针对不同情况查询不同的表封装为一个字段 需求 现有一个表A,我们要根据表A里的字段type的值来决定是关联查询表B...

  • ORM之字段属性对象Field

    字段属性对象Field Model的字段属性对应数据表中的相应字段,pg表中不同的字段有不同类型,Odoo也为其封...

  • JdbcTemplate

    查询操作 复杂查询 复杂查询二:查询出来后封装为实体对象(通过RowMapper将类的属性与表的字段进行映射) 使...

  • MySQL数据库学习day6

    回顾 外键:关联关系(表与表之间:表中字段指向另一张表的主键) 联合查询:union,多表合并和单表不同查询条件 ...

  • mysql分库分表简单总结

    垂直拆分 把热点字段和非热点字段拆分到不同的表中 水平拆分 如果查询方式除了id外 有一个 假设这个字段是name...

  • sqlzoo练习9-join操作

    Join opetation指的是不同的表之间通过某个相同的字段进行关联,从而进行查询操作。 image 通过下面...

  • python学习笔记-数据库06_连接查询

    连接查询可以实现多表的查询,当查询的字段数据来自不同的表就可以使用连接查询来完成连接查询可以分为:内连接查询左连接...

  • orm查询操作

    单表查询操作 外键的跨表查询 正向查询(在有外键字段的表向没有的表查询) 反向查询(没有外键的字段向有外键字段的表...

  • 数据库学习笔记-基础查询

    基础查询 查询字段语法 查询单字段SELECT 字段 FROM 表名;查询多字段SELECT 字段1,字段2,字段...

  • 宽表、窄表、维度表、事实表

    一、概念 宽表:把多个维度的字段都放在一张表存储,增加数据冗余是为了减少关联,便于查询,查询一张表就可以查出不同维...

网友评论

      本文标题:针对不同情况查询不同的表封装为一个字段

      本文链接:https://www.haomeiwen.com/subject/mpthuqtx.html