0

美好的一天,伙计们。对于这个问题,如果 user2 跟随 user1,我需要从 user2 之后的表“跟随”中获取 user1。这有点棘手。我在不存在且不在的情况下做到了,但我从 user1 列中获取了所有名称。

例如:

安德烈亚斯跟随卡特琳娜,但卡特琳娜没有跟随安德烈亚斯。所以安德烈亚斯不是我想要的。但阿瑞斯跟着安娜,安娜跟着阿瑞斯。所以我们得到 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);

提前致谢!

4

2 回答 2

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;

最后一个条件只是删除重复项,因此一对名称在结果集中只出现一次。

于 2014-12-01T17:28:58.733 回答
0

自加入呢?

这应该会产生一个数据集,其中用户相互关注以及源用户的用户信息。

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

根据您希望集合 1 和集合为彼此的追随者的数据的交集来考虑关系数据。

我假设人们不会跟随自己。user1_name 是唯一的

现在,如果您需要删除该集合以便关系仅列出一次...添加到第一个内部联接

on F.user1_name > F.user1_name

于 2014-12-01T17:31:31.317 回答