具有OUTER RIGHT JOIN的SQL查询

时间:2019-03-29 12:02:10

标签: sql

我有两个表,比如说table1有7条记录,而table2只有2条记录。我想要两个表中的匹配记录,即第二个表中只有2条记录。我不确定在这里使用联接。

当我执行查询时,它显示了所有7条记录。向我提出您的想法。我尝试使用RIGHT JOIN,但仍显示7条记录。

TABLE1

id  deptid
3     3
2     3 
4     3
7     3
91    3 
31    3
55    3

TABLE2

id  deptid dname
1     3     A
2     3     B


SELECT t1.id, t2.dname FROM TABLE1 t1 JOIN TABLE t2 ON t2.deptid = t1.deptid

3 个答案:

答案 0 :(得分:0)

可能需要一个不同的子句

  SELECT distinct t1.id, t2.dname 
  FROM TABLE1 t1 
  JOIN TABLE t2 ON t2.deptid = t1.deptid

答案 1 :(得分:0)

您的表没有连接它们的完整键-deptid是不够的。您可以使用row_number()生成另一个密钥:

SELECT t1.id, t2.dname
FROM (SELECT t1.*,
             ROW_NUMBER() OVER (PARTITION BY deptid ORDER BY id) as seqnum
      FROM TABLE1 t1
     ) t1 JOIN
     (SELECT t2.*,
             ROW_NUMBER() OVER (PARTITION BY deptid ORDER BY id) as seqnum
      FROM TABLE t2
     ) t2
     ON t2.deptid = t1.deptid AND t2.seqnum = t1.seqnum;

答案 2 :(得分:0)

您的Table1包含Table2中存在的所有deptid,因此使用任何联接将为您提供所有记录。

如果您期望的是Table1中存在的Table2中的deptid,那么您需要使用内部查询或CTE。

从Table2中选择*,其中deptid在(从Table1中选择deptid);