Sql 内部联接-选择多行错误的结果

Sql 内部联接-选择多行错误的结果,sql,db2,ibm-midrange,Sql,Db2,Ibm Midrange,这可能是一个不切实际的问题,但通过谷歌搜索,我认为我必须使用内部连接,但无法使其工作: 我想运行一个SQL命令从表A中获取数据,如果它存在于表B中,并且所有预期的列都匹配,但我会在AS400上得到选择多行错误的结果,当然,因为我需要所有数据 我做错了什么?目标是使用表B作为WHERE条件,同时从表A中进行选择 SELECT column1, column2, column3, column4, column5 from TableA INNER JOIN TableB ON

这可能是一个不切实际的问题,但通过谷歌搜索,我认为我必须使用内部连接,但无法使其工作:

我想运行一个SQL命令从表A中获取数据,如果它存在于表B中,并且所有预期的列都匹配,但我会在AS400上得到选择多行错误的结果,当然,因为我需要所有数据

我做错了什么?目标是使用表B作为WHERE条件,同时从表A中进行选择

SELECT column1, column2, column3, column4, column5
from TableA INNER JOIN
     TableB
     ON TableA.column1 = TableB.column1 and
        TableA.column2 = TableB.column2 and 
        TableA.column3 = TableB.column3
表A和表B也有许多行


谢谢大家!

您的错误在该查询中没有意义。但是,如果只需要一个表中的列,请使用exists:


这可以防止联接引入重复项,并且通常具有更好的性能。

您的错误在该查询中没有意义。但是,如果只需要一个表中的列,请使用exists:


这可以防止联接引入重复项,并且通常具有更好的性能。

请注意,这可能是一个问题:值不是唯一的,TableA有许多行与TableB的列值匹配。请将一些示例数据与它们的预期输出放在一起。请注意,这可能是一个问题:值不是唯一的,TableA有许多行与TableB的列值匹配。请将一些示例数据与它们的预期输出放在一起。
select a.*
from TableA a
where exists (select 1
              from TableB b
              where a.column1 = b.column1 and
                    a.column2 = b.column2 and 
                    a.column3 = b.column3
             );