Join 基于三个键的SQL连接

Join 基于三个键的SQL连接,join,teradata,Join,Teradata,数据库是Teradata 我有两张桌子,我正试图加入其中。以下是表格结构。当我加入这些表时,我希望得到两行作为输出,但得到4行。这种行为的原因是什么。基于三个键的Join应该唯一地标识一行,但仍然得到4行作为输出。感谢您的帮助 TableA Weekkey|segment|type|users 201501|1|A|100 201501|1|B|100 TableB Weekkey|segment|type|revenue 201501|1|A|200 201501|1|B|200 当我使用以

数据库是Teradata

我有两张桌子,我正试图加入其中。以下是表格结构。当我加入这些表时,我希望得到两行作为输出,但得到4行。这种行为的原因是什么。基于三个键的Join应该唯一地标识一行,但仍然得到4行作为输出。感谢您的帮助

TableA
Weekkey|segment|type|users
201501|1|A|100
201501|1|B|100
TableB
Weekkey|segment|type|revenue
201501|1|A|200
201501|1|B|200
当我使用以下查询连接这两个表时,我得到以下结果

select a.* ,b.user
from tablea a left join  tableb b on a.weekkey=b.weekkey 
and  a.segment=b.segment
and  a.type=b.type

Weekkey|segment|type|revenue|users
201501|1|A|200|100
201501|1|B|200|100
201501|1|A|200|100
201501|1|B|200|100

使用sql server,以下是ddl和示例数据以及您发布的查询。您所说的您得到的输出不会发生在这里

create table #tablea
(
    Weekkey int
    , segment int
    , type char(1)
    , users int
)

insert #tablea
select 201501, 1, 'A', 100 union all
select 201501, 1, 'B', 100

create table #TableB
(
    Weekkey int
    , segment int
    , type char(1)
    , revenue int
)
insert #TableB
select 201501, 1, 'A', 200 union all
select 201501, 1, 'B', 200

select a.* 
    , b.revenue
from #tablea a 
left join #tableb b on a.weekkey = b.weekkey 
and a.segment = b.segment
and a.type = b.type

drop table #tablea
drop table #TableB

您使用的是哪个数据库?使用sql server以及您发布的数据和查询输出是不可能的。我(通过查看表名)判断这是一个示例查询。你确定你没有重复使用别名?比如:a.type=a.type同样,根据您的示例数据,您的
users
列位于TableA中,而您的查询则相反。数据库是terdata。我没有使用任何重复的别名。数据库是terdata。当我联系所有三个键并加入时,我没有得到这个查询的重复。这是teradata特有的行为吗?从表a中选择一个*,b.user左键连接a.weekkey | | a.segment | | a.type=b.weekkey | | b.segment | | b.type您用几个DBMS标记了您的问题。正如我在帖子中所说,这是针对sql server的。