MySQL中的二度连接

时间:2015-10-09 07:07:16

标签: mysql

我的任务是找到一个'被联系者的二级联系数量。在一张桌子上'联系人'列'被联系者'和' contacter'。到目前为止,我已经能够找到二级联系人的名字,但不能消除那些是一级联系人。例如,如果Adam既是Mike的二级连接和第一级连接,那么查询不应该返回Adam,但我的查询确实如此。我是SQL的新手,所以任何帮助都很棒。

SELECT 
  contactsB.contacter
FROM 
  contacts AS contactsB
  INNER JOIN contacts AS contactsA 
  ON contactsA.contacter = contactsB.contactee 
    AND contactsA.contactee <> contactsB.contactee 
    AND contactsA.contactee = <insert contactee here>

2 个答案:

答案 0 :(得分:1)

使用此查询

SELECT b.contactee, c.contacter 
FROM 
    contacts b 
    INNER JOIN contacts c ON b.contacter = c.contactee AND b.contactee != c.contacter 
ORDER BY 1

要获得二级学位联系人的数量,只需按此方式添加COUNT(*)GROUP BY

SELECT b.contactee, COUNT(*) 
FROM 
    contacts b 
    INNER JOIN contacts c ON b.contacter = c.contactee AND b.contactee != c.contacter 
GROUP BY 1

答案 1 :(得分:1)

SELECT a.contacter, b.contactee 
FROM
    contacts a INNER JOIN contacts b
    ON a.contacter = b.contactee
    AND a.contactee != b.contacter 
    AND b.contacter NOT IN 
        (SELECT c.contacter 
         FROM 
             contacts c 
             WHERE a.contactee = c.contactee)
ORDER BY 1