2011-03-06 50 views
1

我一直在努力做一个SQL查询,返回以下;努力做出一个sql查询

谁是他的同事都对名字和朋友

我的表是从下面的命令建立的名单;

CREATE TABLE relation(
name_1 varchar(255), 
name_2 varchar(255), 
rel varchar(255) 
) 

我已经试过

SELECT NAME_1, NAME_2 from relation 
where rel LIKE 'c%' and rel like 'f%'; 

,但返回的表是空的。

+0

它会更好,如果你发布你的表的数据。我认为你的桌子没有完成。 – stinepike 2011-03-06 10:20:58

回答

1

没有行可以有rel一次以cf开头。

一种方法是创建一个子查询来分类关系。在此,它将同事分类为1和朋友为2.要检测交换名称的关系行,查询会按照字母顺序挑选第一个名称,如name_1having条款要求存在这两种类型的关系。

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) 
       ) 
     ) 
+0

欢呼它的工作,THX你的帮助,你的时间 – user493417 2011-03-06 10:40:20

+0

@ user493417:似乎为我工作,看到这个[数据浏览器示例](HTTP://data.stackexchange。 COM /计算器/ q/94569 /) – Andomar 2011-03-06 10:44:31

+0

@ user493417:你可以尝试'case'排序招,加入到回答 – Andomar 2011-03-06 11:03:12

0

这种情况下不会存在

rel LIKE 'c%' and rel like 'f%'; 

你不能有字以C开始以f!

也许你的意思是OR

+0

该表支持两个人都是朋友和同事的查询。我试着用WHERE rel ='friends'和rel ='coworker' aswell – user493417 2011-03-06 10:19:46

+0

在这种情况下,在rel列中db会是什么? – 2011-03-06 10:20:55

+0

看到@andomar答案,我想它什么ü寻找 – 2011-03-06 10:22:29

0

LIKE 'C%' 和rel像 'F%';

想想你在说什么有:返回的所有行的列rel开始在同一时间开始用F A c和

显然不可能

你可能想:

where rel LIKE 'c%' OR rel like 'f%'

1

您需要使用

SELECT NAME_1, NAME_2 from relation 
where rel LIKE 'c%' or rel like 'f%'; 

相对不能用C开始,以f开头。