我有两个表,比如说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
答案 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);