没有行可以有rel
一次以c
和f
开头。
一种方法是创建一个子查询来分类关系。在此,它将同事分类为1和朋友为2.要检测交换名称的关系行,查询会按照字母顺序挑选第一个名称,如name_1
。 having
条款要求存在这两种类型的关系。
select name_1
, name_2
from (
select case when name_1 > name_2 then name_1 else name_2 end as name_1
, case when name_1 > name_2 then name_2 else name_1 end as name_2
, case when rel like 'c%' then 1
when rel like 'f%' then 2
end as Type
from YourTable
) as SubQueryAlias
group by
name_1
, name_2
having count(distinct Type) = 2
另一种方法是选择所有的同事,并用exists
,要求他们的朋友:
select distinct
case when name_1 > name_2 then name_1 else name_2 end as name_1
, case when name_1 > name_2 then name_2 else name_1 end as name_2
from YourTable c
where c.rel like 'c%'
and exists
(
select *
from YourTable f
where f.rel like 'f%'
and
(
(c.name_1 = f.name_1 and c.name_2 = f.name_2)
or (c.name_1 = f.name_2 and c.name_2 = f.name_1)
)
)
它会更好,如果你发布你的表的数据。我认为你的桌子没有完成。 – stinepike 2011-03-06 10:20:58