SQL自联接查询

时间:2014-09-14 11:01:42

标签: sql oracle self-join

我是一名学生参加Oracle数据库课程并且在我的生活中我无法弄清楚这个问题。如果你能提供帮助我真的很感激。

每个人都有一个配偶,也是一个人。

表名:人类

记录:

  • H#HName S#
  • 101 Adam 102
  • 102 Eve 101
  • 103 Cindy 104
  • 104 David 105
  • 105 Ellen null
  • 106 Frank 107
  • 107 George 106

H#=主键,S#=外键

问题: “显示配偶与其他人结婚的人。例如,如果101的配偶是102,那么102的配偶应该是101.但是,在这张表中,103的配偶是104,但104的配偶是105.写一个查询来查找所有这种不匹配的记录。“

我知道这个问题需要自我加入,但我创建的所有自联接要么返回所有记录,要么不返回任何内容。

1 个答案:

答案 0 :(得分:2)

看起来很简单,你只需要根据一个s#匹配另一个表中的h#而不是相反的方式进行自我加入。

SELECT 
  h1.h#
  ,h1.name
FROM 
  humans AS h1
    JOIN humans AS h2
      ON h1.s# = h2.h# AND h2.s# <> h1.h#