我有一个表美孚的Sql多个连接到同一台既包容性和排他性
FOO
-------
id
name
BAR
-------
id
name
FOO_BAR_XREF
-------
foo_id
bar_id
,我需要选择FOO的所有实例,其中foo.id在foo_bar_xref记录为1的bar_id和排除记录从foo其中foo.id有2
FOO的bar_id一个结果N foo_bar_xref - > foo_bar_xref是一对多*强调文本* foo_bar_xref可能包含每foo_id多个bar_id的
这是可能的,只有加入或我需要在w中使用not exists语句吗?这里的条款?
到目前为止,我
select f.name from FOO f
inner join FOO_BAR_XREF fb_1 on fb_1.foo_id = f.id
inner join FOO_BAR_XREF fb_2 on fb_2.foo_id = f.id
where fb_1.bar_id = 1 and fb_2.bar_id <> 2
group by f.name -- remove dupes - running on sql server and is paged with sql servers hackish over keyword where distinct doesn't work so well.
那不是筛选出有2
这似乎是工作一个酒吧,但我不知道它是最有效的Foo的
select f.name from FOO f
inner join FOO_BAR_XREF fb_1 on fb_1.foo_id = f.id and fb_1.bar_id = 1
left outer join FOO_BAR_XREF fb_2 on fb_2.foo_id = f.id and fb_2.bar_id = 2
where fb_2.bar_id is null
group by f.name -- remove dupes
我喜欢你的左连接方式 - 我的想法也是如此。 – sgeddes