sql中 one left join more where column_name != value
结果:主表即one,未达到想要的结果,即未筛选掉。
因为more中多条数据对应one,more中个别数据被过滤,则剩余未过滤数据会产生对应的one数据。
本人想要实现more中包含数据满足筛选则对应的one也被过滤。
请大神帮忙解答,除了使用‘in’还有什么好的方法,使查询速度最快。

解决方案 »

  1.   

    本人使用mybatis,因为查询more中其他不满足筛选的数据产生one的数据实例,所以mybatis处理时,也产生了one的数据实例。所以在mybatis能解决也可以
      

  2.   

    SELECT * TABLE_A A LEFT JOIN TABLE_B B ON B.*** = A.*** WHERE A.** = ? AND B.** = ?
    以上,TABLE_A就是您说的一,TABLE_B,就是多。ON后的B.*** = A.***,是A和B的关联逻辑。WHERE后的,如果不满足,就不会被显示。
    您的描述,我觉得应该增加WHERE后的内容。
      

  3.   


    比如 部门表department 员工表employee
    查询部门和部门下的所有员工:
    SELECT * FROM department d LEFT JOIN employee e ON d.id = e.did;查询不是员工Tom所在的部门及部门下的员工:
    SELECT * FROM department d LEFT JOIN employee e ON d.id = e.did WHERE e.name != 'Tom';但是结果集里还是有部门1,mybatis看到部门1,还是会创建一个实例。我想得到的结果是,没有部门1,只剩下部门2。
      

  4.   

    解决方法是:
    查询包含‘Tom’的部门id,然后在查询部门时将id过滤掉。
    查询'Tom'的部门:SELECT did FROM employee WHERE NAME = 'Tom';
    查询部门:SELECT * FROM department d LEFT JOIN employee e ON d.id = e.did WHERE d.id NOT IN (SELECT e.did FROM employee e WHERE e.name = 'Tom');