仅返回表A中存在的表A的一个值

时间:2017-05-02 20:12:54

标签: sql db2

在表A中查找表B中存在的唯一记录。

表A

CustID, name, addr1
A001, Bill Adams, 123 main st
B007, Jon Brown, 229 oak st
C029, Sue Cook, 16 park ave

表B

CustID, invoice_no
A001, 189
A001, 202
A001, 243
C029, 212

期望的结果:表B中只有1个A001实例,而不是3:

A001, Bill Adams
C029, Sue Cook

当前的sql:

select A.CustID, A.name
from table A
join table B on A.custID = B.custID

6 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

SELECT A.CustID, A.Name, A.Addr1
FROM Table A
JOIN (SELECT DISTINCT CustID From Table) B ON A.CustID = B.CustID

你也可以做WHERE EXISTS而不是JOIN,但我的理解是JOIN会有更好的表现。

答案 1 :(得分:1)

由于类似于笛卡尔积的连接,重复发生。

如果你选择这样的东西,它应该有效:

SELECT A.CustID, A.name
FROM table A
WHERE EXISTS (SELECT * FROM B WHERE A.custID= B.custID)

答案 2 :(得分:0)

我最后只是添加了

select distinct A.custID, A.name

正如@dnoeth建议的那样,除非这种方法存在问题。似乎为我做了诀窍。

答案 3 :(得分:0)

解决方案1 ​​

select * from tableA f1
inner join lateral
(
 select * from TableB f2
 where f1.CustID=f2.CustID
 fetch first rows only
) f3 on 1=1

答案 4 :(得分:0)

解决方案2:

select distinct f1.* 
from tableA f1
inner join TableB f2 on f1.CustID=f2.CustID

答案 5 :(得分:0)

解决方案3:

select * from tableA f1
where f1.CustID in ( select f2.CustID  from TableB f2)