2014-12-01 71 views
0

美好的一天傢伙。對於這個問題,如果user2跟隨user1,我需要從user2跟隨用戶2的表「follow」獲取user1。這有點棘手。我做了與不存在,但沒有,但我得到了user1列的所有名稱。Sql不存在,不在聲明

例如:

安德烈亞斯如下卡捷琳娜但卡捷琳娜不跟蹤Andreas。所以安德烈亞斯並不是我想要的。但阿里斯跟隨安娜,安娜跟隨阿里斯。所以我們得到Aris。

事情是,我沒有得到這樣的結果,我得到所有的名字。

Follows表:

      user1_name user2_name 
insert into follows values('Andreas', 'Katerina'); 
insert into follows values('Aris', 'Andreas'); 
insert into follows values('Aris', 'Anna'); 
insert into follows values('Aris', 'Kostas'); 
insert into follows values('Aris', 'Panos'); 
insert into follows values('Aris', 'Yannis'); 
insert into follows values('Anna' ,'Aris'); 
insert into follows values('Anna', 'Maria'); 
insert into follows values('Anna', 'Panos'); 
insert into follows values('Dimitris', 'Maria'); 
insert into follows values('Dimitris', 'Anna'); 
insert into follows values('Kostas' ,'Andreas'); 
insert into follows values('Kostas', 'Panos'); 
insert into follows values('Kostas', 'Katerina'); 
insert into follows values('Maria', 'Yannis'); 
insert into follows values('Maria', 'Kostas'); 
insert into follows values('Maria', 'Anna'); 
insert into follows values('Maria', 'Aris'); 
insert into follows values('Maria', 'Panos'); 
insert into follows values('Panos','Andreas'); 
insert into follows values('Panos', 'Aris'); 
insert into follows values('Petros', 'Andreas'); 
insert into follows values('Yannis', 'Aris'); 
insert into follows values('Yannis', 'Andreas'); 

User information表:

insert into user_inf values('Andreas', 'Martiou 25', '1990-12-02'); 
insert into user_inf values('Aris', 'Papandreou 10', '1987-03-12'); 
insert into user_inf values('Anna', 'Aiakidon 20', '1989-07-15'); 
insert into user_inf values('Dimitris', 'Dodonis 3', '1992-09-07'); 
insert into user_inf values('Katerina', '28 Oktobriou 4', '1993-01-09'); 
insert into user_inf values('Kostas','Kasioumi 3', '1992-12-12'); 
insert into user_inf values('Maria', 'Kalari 8', '1993-08-31'); 
insert into user_inf values('Petros', 'Panepistimiou 9', '1992-04-15'); 
insert into user_inf values('Panos', 'Aneksartisias 13', '1991-05-27'); 
insert into user_inf values('Yannis', 'Ithakis 20', '1993-07-03'); 

我想要得到的結果如下:

user1 
------ 
Aris 
Aris 
Aris(because 3 of the people that he follows, follow him too) 
Anna 
Maria 
Panos 
Yannis 

我的代碼:

/* not exists.*/ 
select distinct Fol.user1_name 
from follows as Fol,user_inf as Usr 
where not exists 
         (select distinct F.user2_name,F.user1_name 
          from follows as F, user_inf as U 
          where Fol.user2_name = F.user1_name AND Fol.user1_name = F.user2_name AND F.user1_name = Usr.name AND Fol.user1_name = U.name); 

/* not in.*/ 
select distinct Fol.user2_name 
from follows as Fol,user_inf as Usr 
where Fol.user1_name not in 
         (select distinct F.user1_name,F.user2_name 
          from follows as F, user_inf as U 
          where Fol.user2_name = F.user1_name AND Fol.user1_name <> F.user2_name AND F.user1_name = Usr.name AND Fol.user2_name <> U.name); 

在此先感謝!

+0

請編輯您的問題,並提供結果你想要提供的數據。 – 2014-12-01 17:26:47

回答

1

如果你想對,繼對方,怎麼樣:

select f1.* 
from follows f1 join 
    follows f2 
    on f1.user1_name = f2.user2_name and 
     f1.user2_name = f1.user1_name and 
     f1.user1_name < f1.user2_name; 

最後一個條件只是刪除重複的,所以一對名字的只有一次在結果集中出現。

+0

有沒有辦法可以做到不存在??? – Noisie 2014-12-01 17:43:53

+0

@Noisie。 。 。可能吧,但我覺得這更優雅。順便說一下,存在'比'不存在'更合適。 – 2014-12-01 21:39:52

0

自我加入怎麼樣?

這應該產生一個數據集,由此用戶可以相互關注以及源用戶的用戶信息。在 你想去的地方設置1和設置是海誓山盟的追隨者數據的交集方面的關係數據

SELECT F.user1_name, F.user2_name, u.* 
FROM follows F 
INNER JOIN follows F2 
    on F.user2_name = F2.User1_name 
INNER JOIn user_inf U 
    on F.user1.name U.name 

思考。

我假設人們不會跟隨自己。 user1_name是唯一現在

,如果你需要刪除組,這樣的關係僅列出一次...... 添加到第一內加入

on F.user1_name > F.user1_name