2

我有这张表(Prefrences_Table)

--------------------------
|student | Preferences |
--------------------------
Stud A   |  Stud B  
Stud A   |  Stud C
Stud B   |  Stud E
Stud B   |  Stud A
Stud C   |  Stud F
Stud F   |  Stud B
--------------------------

如果“Stud A”在他的偏好列表中添加了“Stud B”,我想检查“stud B”是否也在他的偏好中添加了“stud A”,所以我可以将它们都添加到一个组中。这如何使用 SQL 或 C# 来完成?

4

4 回答 4

4

自加入在这里应该可以正常工作。附加谓词仅返回匹配的第一个实例以避免重复。

select t.student, t1.student
from 
  Prefrences_Table t
  inner join Prefrences_Table t1
    on t.student = t1.preferences
       and t.preferences = t1.student
       and t.student < t1.student
于 2013-10-04T15:43:56.480 回答
3

这可能会让你回答你的问题,如果两个学生都在偏好中添加了另一个,则字段相互将是一个,否则为零

SELECT T1.student, T2.Preferences, 
(SELECT COUNT(*) FROM Prefrences_Table T2 WHERE T2.Preferences = T1.student AND T2.student = T1.Preferences) AS mutual
FROM Prefrences_Table T1
于 2013-10-04T15:48:29.583 回答
1

另一种选择如下:

SELECT * FROM 
(
  SELECT PM.student, PM.Preferences,
  (SELECT COUNT(student) FROM Prefrences_Table AS PI WHERE PI.Preferences = PM.student
  AND PI.student = PM.Preferences) AS CheckCross
  FROM Prefrences_Table AS PM
) AS PD
WHERE PD.CheckCross > 0
于 2013-10-04T15:49:42.150 回答
1

你有一些 SQL 答案,这里是 c#/linq 中的一个。

var list = new List<Prefrences_Table>();

var results = (from t in list
               join t1 in list on t.student equals t1.preferences
               where
                   t.student == t1.preferences &&
                   t.preferences == t1.student &&
                   string.CompareOrdinal(t.student, t1.student) < 0
               select new {t.student, t1.student}
              );
于 2013-10-04T15:59:35.907 回答