我有以下查询:
select distinct a.ID,a.namefrom Employee ajoin DependencIEs b on a.ID = b.eIDwhere not exists ( select * from DependencIEs d where b.ID = d.ID and d.name = 'Apple' )and exists ( select * from DependencIEs c where b.ID = c.ID and c.name = 'Orange' );
我有两张桌子,比较简单.
第一个Employee有一个ID列和一个name列
第二个表DependencIEs有3列,一个ID,一个eID(要链接的员工ID)和名称(apple,orange等).
数据看起来像这样
Employee表看起来像这样
ID | name-----------1 | Pat2 | Tom3 | Rob4 | Sam
依赖
ID | eID | name--------------------1 | 1 | Orange2 | 1 | Apple3 | 2 | StrawBerry4 | 2 | Apple5 | 3 | Orange6 | 3 | Banana
正如你所看到的,帕特同时拥有Orange和Apple,他需要被排除在外,它必须是通过连接,我似乎无法让它工作.最终数据应该只返回Rob最佳答案使用您想要的名称进行内连接,在您不使用的名称上左连接,然后使用where确保左连接无法匹配,如此(SQL Fiddle):
select distinct a.ID,a.namefrom Employee a inner join DependencIEs b on a.ID = b.eID and b.name = 'Orange' left join DependencIEs c on ( a.ID = c.eID and c.name = 'Apple')where c.ID is null;
总结 以上是内存溢出为你收集整理的mysql – 如何用JOIN替换NOT EXISTS?全部内容,希望文章能够帮你解决mysql – 如何用JOIN替换NOT EXISTS?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)