我有一个人表,每个人都可以有一个助理合伙人,如下所示:Id_Person|姓名|id_Partner-|-|1|哈维|52|John|43|Mike|64|Lucy|25|珍妮|16|辛迪|3所以我想问一个问题,我可以得到所有没有重复的情侣,比如名称1|名称2
哈维|珍妮John|LucyMike|辛迪我现在知道如何用Python语言来做这件事,但在SQL中我却一无所知提前谢谢你!
nfeuvbwi1#
在SQL中,我们使用自内连接来解决这些问题,这是在创建表的临时别名并将表连接到其别名时。联接条件将是两个不同的列,每个表中的一个列彼此相等。这允许您从单个列生成成对的列,但所有行都将以向后表示形式复制。要消除这些,您需要一个过滤器,在该过滤器中,您可以比较一列小于另一个表中的相应列。正如条件所示,这意味着一组人的ID必须全部小于所有合作伙伴的ID。下面是为您的表编写查询的方式:
SELECT Table1.Name AS "Name 1", Table2.Name AS "Name 2" FROM Table1 INNER JOIN (Table1) Table2 ON Table1.id_person = Table2.id_partner WHERE Table1.id_person < Table2.id_person
然后,如果需要,可以按任一名称列进行排序以对输出进行排序。
hjqgdpho2#
选择T2.[名称]作为名称1,T1。从表名T1中选择[名称]作为名称2内联接t2.id_Partner=t1.id_Person上的表名T2
2条答案
按热度按时间nfeuvbwi1#
在SQL中,我们使用自内连接来解决这些问题,这是在创建表的临时别名并将表连接到其别名时。联接条件将是两个不同的列,每个表中的一个列彼此相等。
这允许您从单个列生成成对的列,但所有行都将以向后表示形式复制。要消除这些,您需要一个过滤器,在该过滤器中,您可以比较一列小于另一个表中的相应列。
正如条件所示,这意味着一组人的ID必须全部小于所有合作伙伴的ID。
下面是为您的表编写查询的方式:
然后,如果需要,可以按任一名称列进行排序以对输出进行排序。
hjqgdpho2#
选择T2.[名称]作为名称1,T1。从表名T1中选择[名称]作为名称2内联接t2.id_Partner=t1.id_Person上的表名T2