2011-03-06 65 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開頭。