精华内容
下载资源
问答
  • A ID,NAME,BID B ID,NAME,STATE ``` var leftJoinSql = from a in db.A join b in db.B on a.ID equals b.ID into bb from bbb in bb.DefaultIfEmpty() ...我想个过滤条件,只关联BSTATE=0的字段
  • JPA 关联表添加关联条件,当我其中一个的数据状态发送改变,不是业务上所需要的,这时实体查询还是会带出关联数据,所以我们需要处理这部分数据;第一种方式:删除中间对应数据;第二种添加关联条件,按条件带出...

    JPA 关联表添加关联条件,当我其中一个表的数据状态发送改变,不是业务上所需要的,这时实体查询还是会带出关联数据,所以我们需要处理这部分数据;第一种方式:删除中间表对应数据;第二种添加关联条件,按条件带出有效数据

    • 代码示例
      • 用户实体
       @Entity
       @Table(name = "pmi_t_user")
       @org.hibernate.annotations.Table(appliesTo = "pmi_t_user",comment="用户信息表")
       @Component
       @ApiModel(value = "用户实体")
       public class User implements Serializable {
       
           private static final long serialVersionUID = -4618191047832700121L;
           /**
            * 主键id
            */
           @ApiModelProperty(value = "主键id")
           @Id
           @GeneratedValue(strategy = GenerationType.IDENTITY)
           private Long id;
       
       
           /**
            * 用户名
            */
           @ApiModelProperty(value = "用户名", required = true)
           @NotBlank(message = "用户名不能为空")
           @Column(name = "user_name", nullable = false,columnDefinition="varchar(100) COMMENT '用户名'")
           private String userName;
       
       
           /**
            * 关联角色 db_status 是数据库角色表字段
            * @WhereJoinTable(clause = "db_status = 1")
            */
           @ApiModelProperty(value = "关联角色")
           @ManyToMany(fetch = FetchType.EAGER,targetEntity = Role.class)
           @JsonIgnoreProperties(value = { "users" })
           @Where(clause = "db_status = 1")
           @JoinTable(name = "pmi_t_user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
           @org.hibernate.annotations.ForeignKey(name = "none")
           private Set<Role> roles;
       }
      
      • 角色
       @Entity
       @Table(name = "pmi_t_role")
       @org.hibernate.annotations.Table(appliesTo = "pmi_t_role",comment="角色")
       @ApiModel(value = "角色")
       public class Role implements Serializable {
       
           private static final long serialVersionUID = 2376963713493278377L;
           /**
            * 主键id
            */
           @ApiModelProperty(value = "主键id")
           @Id
           @GeneratedValue(strategy = GenerationType.IDENTITY)
           private Long id;
       
           /**
            * 角色名称
            */
           @ApiModelProperty(value = "角色名称")
           @NotNull(message = "角色名称不能为空")
           @Length(max = 20,min=1, message = "角色名称长度大于1小于20")
           @Column(name = "role_name", nullable = false,columnDefinition="varchar(20) COMMENT '角色名称'")
           private String roleName;
       
       
           /**
            * 数据状态 1:正常  -1:删除
            */
           @ApiModelProperty(value = "数据状态")
           @Column(name = "db_status", nullable = false,columnDefinition="tinyint(4) DEFAULT '1' COMMENT '数据状态 1:正常  -1:删除'")
           private int dbStatus;
       
       }
      
    • 查询效果:
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • sql打印
      在这里插入图片描述
    展开全文
  • sql关联 on后面加条件

    千次阅读 2019-11-05 18:30:50
    记两则需求SQL关联注意事项 需求一: 两个条件选择join 两个表字段如下 ci: c_id level 1 level2 level3 ...qq: ...两个关联条件是: qq.level_rank = 1 时, 用qq.level_id =ci. level1...

    记两则需求SQL关联注意事项

    需求一: 两个表分条件选择join

    两个表字段如下

    表ci:

    c_idlevel 1level2level3level4其他字段

    表qq:

    level_ranklevel_id其他字段

    两个表的关联条件是: qq.level_rank = 1 时, 用qq.level_id =ci. level1 ;qq.level_rank = 2 时, 用qq.level_id =ci. level2; qq.level_rank = 3 时, 用qq.level_id =ci. level3; qq.level_rank = 4 时, 用qq.level_id =ci. level4;

    1.在 mysql gp gp impala 数据库中 可以如下形式join, 在on 后面写case 条件.

    select *
    from 
    (select 111 as level_1 ,111 as level_2 ,111 as level_3,111 as level_4
    union all select 122 as level_1 ,122 as level_2 ,122 as level_3,122 as level_4
    union all select 333 as level_1 ,331 as level_2 ,333 as level_3,333 as level_4
    union all select 111 as level_1 ,111 as level_2 ,111 as level_3,444 as level_4) ci
    left join
    (select 1 as level_rank,111 as level_id  
    union all select 2 as level_rank ,222 as level_id 
    union all select 3 as level_rank ,333 as level_id 
    union all select 4 as level_rank ,44 as level_id) qq
    on case qq.level_rank when 1 then qq.level_id = ci.level_1
    when 2 then qq.level_id = ci.level_2 when 3 then qq.level_id = ci.level_3  when 4 then qq.level_id = ci.level_4 end
    
    1. 但上述语句在hive中并不适用.

    需求二: 两个表关联条件中有null的情况

    当有字段为null时, 是关联不到任何数据的,比如:

    select * from 
    (select 111 as level_1 ,111 as level_2 ,111 as level_3,111 as level_4
    union all select 122 as level_1 ,122 as level_2 ,122 as level_3,122 as level_4
    union all select 333 as level_1 ,331 as level_2 ,333 as level_3,333 as level_4
    union all select 111 as level_1 ,111 as level_2 ,111 as level_3,444 as level_4) ci
     join
    (select 1 as level_rank,111 as level_id  
    union all select 2 as level_rank ,222 as level_id 
    union all select 3 as level_rank ,333 as level_id 
    union all select 4 as level_rank ,44 as level_id) qq
    on null = null
    

    结果图片如下图所示: :
    多条件join , 其中有条件是null = null 时 , 也不会有结果数据

    select * from 
    (select 111 as level_1 ,111 as level_2 ,111 as level_3,111 as level_4
    union all select 122 as level_1 ,122 as level_2 ,122 as level_3,122 as level_4
    union all select 333 as level_1 ,331 as level_2 ,333 as level_3,333 as level_4
    union all select 111 as level_1 ,111 as level_2 ,111 as level_3,444 as level_4) ci
     join
    (select 1 as level_rank,111 as level_id  
    union all select 2 as level_rank ,222 as level_id 
    union all select 3 as level_rank ,333 as level_id 
    union all select 4 as level_rank ,44 as level_id) qq
    on 1=1 and null = null
    

    结果情况如下图所示:
    在这里插入图片描述
    基于上述情况,避免join情况中出现null的情况, 可以 用函数代替, 在hive中,可用 nvl() 函数.
    对比下面两个写法及结果:

    select * from 
    (select 111 as level_1 ,111 as level_2 ,111 as level_3,111 as level_4
    union all select 122 as level_1 ,122 as level_2 ,122 as level_3,122 as level_4
    union all select 333 as level_1 ,331 as level_2 ,null as level_3,null as level_4
    union all select 111 as level_1 ,111 as level_2 ,111 as level_3,null as level_4) ci
     join
    (select 111 as level_1 ,111 as level_2 ,111 as level_3,111 as level_4
    union all select 122 as level_1 ,122 as level_2 ,122 as level_3,122 as level_4
    union all select 333 as level_1 ,331 as level_2 ,null as level_3,null as level_4
    union all select 111 as level_1 ,111 as level_2 ,111 as level_3,null as level_4) qq
    on qq.level_1 = ci.level_1 and qq.level_2 = ci.level_2 and nvl(qq.level_3,-1) = nvl(ci.level_3,-1) and nvl(qq.level_4,-1) = nvl(ci.level_4,-1)
    

    在这里插入图片描述
    添加了nvl条件过滤的数据条数是4

    select * from 
    (select 111 as level_1 ,111 as level_2 ,111 as level_3,111 as level_4
    union all select 122 as level_1 ,122 as level_2 ,122 as level_3,122 as level_4
    union all select 333 as level_1 ,331 as level_2 ,null as level_3,null as level_4
    union all select 111 as level_1 ,111 as level_2 ,111 as level_3,null as level_4) ci
     join
    (select 111 as level_1 ,111 as level_2 ,111 as level_3,111 as level_4
    union all select 122 as level_1 ,122 as level_2 ,122 as level_3,122 as level_4
    union all select 333 as level_1 ,331 as level_2 ,null as level_3,null as level_4
    union all select 111 as level_1 ,111 as level_2 ,111 as level_3,null as level_4) qq
    on qq.level_1 = ci.level_1 and qq.level_2 = ci.level_2 and qq.level_3 = ci.level_3 and qq.level_4 = ci.level_4
    

    在这里插入图片描述
    没有添加nvl函数过滤的 只有两条数据 .

    展开全文
  • 在个别业务中,可能需要根据关联表与主中的关联关系进行连接才能得到想要的结果, 这有点像条件编译. 符合条件的才去做关联,不符合条件的就不做关联(或说让关联条件失败)   环境: oracle 请看代码: create ...

    在个别业务中,可能需要根据关联表与主表中的关联关系进行连接才能得到想要的结果, 这有点像条件编译. 符合条件的才去做关联,不符合条件的就不做关联(或说让关联条件失败)

     

    环境: oracle

    请看代码:

    create table A1(id number, val number);
    create table A2(id number, type varchar2(2), val number, anyvalue varchar2(30));
    
    insert into a1 values(1, 50);
    insert into a1 values(1, 500);
    insert into a1 values(2, 100);
    insert into a1 values(2, 150);
    insert into a1 values(3, 200);
    insert into a1 values(3, 250);
    insert into a1 values(4, 150);
    insert into a1 values(4, 500);
    
    insert into a2 values(1, '>', 100, '>100');
    insert into a2 values(1, '<=', 100, '<=100');
    insert into a2 values(2, '<', 150, '<150');
    insert into a2 values(3, '<=', 200, '<=200');
    insert into a2 values(4, '>=', 150, '>=150');
    
    select * from a1;
    select * from a2;
    
    select * from a1, a2
    where a1.id = a2.id
     and (case a2.type 
            when '>' then
               (case when a1.val > a2.val then 1 else 0 end)
            when '>=' then
               (case when a1.val >= a2.val then 1 else 0 end)
            when '<=' then
               (case when a1.val <= a2.val then 1 else 0 end)
            when '<' then
               (case when a1.val < a2.val then 1 else 0 end)
            else
              0
            end) = 1;
    
    drop table a1 purge;
    drop table a2 purge;

     

    加上执行结果,方便理解:

    SQL> select * from a1;
     
            ID        VAL
    ---------- ----------
             1         50
             1        500
             2        100
             2        150
             3        200
             3        250
             4        150
             4        500
     
    8 rows selected
    SQL> select * from a2;
     
            ID TYPE        VAL ANYVALUE
    ---------- ---- ---------- ------------------------------
             1 >           100 >100
             1 <=          100 <=100
             2 <           150 <150
             3 <=          200 <=200
             4 >=          150 >=150
    SQL> select * from a1, a2
      2  where a1.id = a2.id
      3   and (case a2.type
      4          when '>' then
      5             (case when a1.val > a2.val then 1 else 0 end)
      6          when '>=' then
      7             (case when a1.val >= a2.val then 1 else 0 end)
      8          when '<=' then
      9             (case when a1.val <= a2.val then 1 else 0 end)
     10          when '<' then
     11             (case when a1.val < a2.val then 1 else 0 end)
     12          else
     13            0
     14          end) = 1;
     
            ID        VAL         ID TYPE        VAL ANYVALUE
    ---------- ---------- ---------- ---- ---------- ------------------------------
             1         50          1 <=          100 <=100
             1        500          1 >           100 >100
             2        100          2 <           150 <150
             3        200          3 <=          200 <=200
             4        150          4 >=          150 >=150
             4        500          4 >=          150 >=150
     
    6 rows selected

     

    展开全文
  • LEFT JOIN关联表中ON,WHERE后面跟条件的区别

    万次阅读 多人点赞 2018-04-02 11:04:58
    前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一...不管and 后面的是A.id=1还是B.id=1,都显示出A中所有的记录,并关联显示B中对应A中id为1的记录或者B中id为1的记录。运行sql :...

    前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。

    后来发现 join on and 不会过滤结果记录条数,只会根据and后的条件是否显示 B表的记录,A表的记录一定会显示。

    不管and 后面的是A.id=1还是B.id=1,都显示出A表中所有的记录,并关联显示B中对应A表中id为1的记录或者B表中id为1的记录。

    运行sql : select * from student s left join class c on s.classId=c.id order by s.id


    运行sql : select * from student s left join class c on s.classId=c.id and s.name="张三" order by s.id


    运行sql : select * from student s left join class c on s.classId=c.id and c.name="三年级三班" order by s.id



    下面的内容为转载

           数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

          在使用left jion时,on和where条件的区别如下:

    1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

    2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

           假设有两张表:

    表1:tab2

    id
    size
    1
    10
    2
    20
    3
    30

    表2:tab2

    size
    name
     
    10
    AAA
    20
    BBB
    20
    CCC


    两条SQL:
    1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’
    2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)

    第一条SQL的过程:

    1、中间表
    on条件: 
    tab1.size = tab2.size
    tab1.idtab1.sizetab2.sizetab2.name
    1
    10
    10
    AAA
    2
    20
    20
    BBB
    2
    20
    20
    CCC
    3
    30
    (null)
    (null)
    |
    |

    2、再对中间表过滤
    where 条件:
    tab2.name=’AAA’

    tab1.idtab1.sizetab2.sizetab2.name
    1
    10
    10
    AAA
      

     

    第二条SQL的过程:

    1、中间表
    on条件: 
    tab1.size = tab2.size and tab2.name=’AAA’
    (条件不为真也会返回左表中的记录)
    tab1.idtab1.sizetab2.sizetab2.name
    1
    10
    10
    AAA
    2
    20
    (null)
    (null)
    3
    30
    (null)
    (null)

         其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。


    展开全文
  • A和B关联查询,以project_id=4为过滤条件,查询结果返回A中的ID,name,B中的project_id,如果B中没有和A匹配的记录则a.project_id返回null,于是第一次我就写出了这样的SQL SELECT t.id,t.name,a....
  • INNER [用户详细信息] [答疑].[所属老师] = [用户详细信息].[用户] INNER [课程信息] [答疑].[所属课程类型] = [课程信息].[课程ID] WHERE ...... WHERE后面跟上你需要的条件 select dyb.*...
  • 在开发的过程中,由于持久层使用的是非关系型数据库mongodb,涉及到列表查询的多表关联查询,在实现此功能的过程中出现了不少问题,做下记录方便以后遇到此类问题可以快速的解决,同时为遇到此类问题的小伙伴提供...
  • 注意match要在lookup后,从筛选条件需要用lookup中as关键字所取用的名称+从表字段名选取 db.adv.aggregate([{ $lookup:{ from:"company", localField:"name", foreignField:"companyName", as:"addr" } ...
  • EF实现多表关联动态条件查询

    千次阅读 2015-03-12 18:01:35
    刚用EF完成了一个十多个联合、动态条件的查询,因为不熟悉表达式树的使用,就想了笨办法,下面做个总结: 1.EF无法根据条件动态join,一开始就需要确定使用那些,准备好数据集;所以把条件分了几个大类,只要...
  • 这个用法倒不是很难,只是今天又遇到了. 还是记录一下吧. 用户, create table user( id int, name varchar(10) ); insert into user...
  • 外键 、操作关联表
  • 问题是这样的,一张职位和一张简历,两个没有可关联字段,按照简历中个人的行业类型、工作类型、城市和薪资关联职位,取职位中与简历四项信息吻合(行业类型相同,工作类型相同,城市相同,薪资大于职位...
  • sql主和副关联要用主的字段组为条件,如果要用副的的字段作为条件就写在on里
  • 实现商品,通过内的id关联查询到供应商的name属性 商品 如下所示 供应商 如下所示 新建查询测试sql 注意, 1、查询tb_goods的全部,所以用t1.*,查询t2的name,并用supplierName替换名称 2、使用...
  • SELECT TOP (#{limit}) storeId, intermediaryId, storeAddress, storeName, storePhone, principal, principalPhone, isEnable ... SELECT ROW_NUMBER() OVER (ORDER BY b.intermedi
  • 2. 对于inner join,满足on后面的条件表的数据才能查出,可以起到过滤作用。也可以把条件放到where后面。   参考: http://wenku.baidu.com/view/fa341ad4c1c708a1284a4450.html   SQL中on条件与where...
  • 一对多关联查询: db.mall_goods.aggregate([ { $lookup: { from: "mall_specs", localField: "id", foreignField: "goods_id", as: "inventory_docs" } } ]);...
  • mysql左关联查询、条件查询

    千次阅读 2020-04-27 09:32:30
    因为疫情有一段时间没有敲代码了,最近刚上手,就出现了问题,事后我总结了一下,是我的粗心大意,等我发现问题原因的...2.现在我要显示全部信息了,左关联查询原本就是以左边的为主,右边的要是有没有匹配上的...
  • 表关联

    千次阅读 2019-06-10 17:35:59
    当一个大和一个或多个小做join时,可以使用mapjoin,性能比普通的join要快很多。 mapjoin的基本原理是:在小数据量情况下,SQL会将用户指定的小全部加载到执行join操作的程序的内存中,从而加快join的执行...
  • MySQL主外键表关联表数据的同时删除

    千次阅读 2014-12-10 16:46:13
    今天做了实验,要求将满足某个条件的主和相关联的几个子的数据全部删除,其实这个要求很简单,如果子在创建外键的时候指定了ON DELETE CASCADE,则直接从主中删除相关记录,子中数据也会一起删除。...
  • 前言:YII2中可以使用model中的relation关系进行表关联应用场景举例: 需要查找当前用户的信息,并关联查询(with)出该用户的发表过的文章,且文章的评论不为0的数据。 $user= user::find()->with([ 'articles' ...
  • sql 关联表分隔符拼接字段查询

    千次阅读 2018-12-03 10:26:39
    问题描述:一个中某字段用分隔符拼接多个另一关联表主键而成(不提倡),查询时需显示关联表其他字段,如名称。    显示关联表其他字段.SQL语句如下: select c.material, stuff((select ';'+name from Sys_...
  • TP5.1多对多关联添加查询条件

    千次阅读 2019-08-06 11:36:37
    前提:需要做RBAC模型权限设计,涉及到角色(role)、权限(rule)、角色权限(role_rule),使用的是tp5.1,想要用tp自带的模型多对多关联查询。 在RoleModel中定义了多对多关联: //多对多关联 public ...
  • Oracle 的 外关联条件 作用

    千次阅读 2018-01-16 15:31:47
    oracel实际开发中,经常遇到这样的状况,两个作外关联时,同时想对被关联表进行条件限制,容易出错,故在此总结下。  实例:  SQL1:  SELECT Count(*)  FROM econtract.cm_contracts_single_v smcon,  ...
  • Flink DataStream 关联实战

    千次阅读 2020-02-13 21:52:26
    上篇博客提到 Flink SQL 如何 Join 两个数据流,有读者反馈说如果不打算用 SQL 或者想自己实现底层操作,那么如何基于 DataStream API 来关联呢?实际上由...
  • Eggjs Sequelize 多表关联查询

    千次阅读 2020-07-03 16:35:50
    对于简单的 增、删、改、查 新手的我也是快速上手了,但是当我遇到需要关联其他查询时,我就懵逼了,不知道怎么关联啊。几经周折,总算搞明白了,特此记录一下~~~ 实现:通过 fdc_vd_user_his 表关联外键,查询 ...
  • Mysql 关联查询得where条件

    千次阅读 2015-12-24 21:44:17
    通常,关联查询时候,把where放在关联条件on之后。但是数据量比较大的时候,有时候性能很低。 如果可以把where放在内表里,尽量放在内表里,尤其是主表里,大数据量的时候可以提高很多查询时间。
  • DB2多表关联UPDATE 语句

    千次阅读 2019-08-01 10:20:30
    血的教训换来的,最后一定要where条件。否则,会将没有关联上的数据字段更新成null. update TM_INS_PROPOSAL TIP set (Total_Amount, Receivable_Busi_Amount, Vehicle_Relation, Busi_Ins_Code, ...
  • on 后面 直接加条件的话,不会对左边的产生影响,on条件是在左关联时候的条件,不管如何都会返回左边中的记录 where 加条件 才会对左边的 生效。where条件是关联查询之后的条件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 226,714
精华内容 90,685
关键字:

关联表加条件