首页 > 解决方案 > 加入3个表不正确的结果

问题描述

我有 3 个带有 common key 的表organization_id

根据交易编号,我可以从表 1 中找到特定交易,例如价值reason_code=B5,所以..

在表 #1 中transaction,有一列reason_code = 'B5'

在表 #2 中reason_code,有一列reason_code = 'B5' and description = 'XYZ'

在表 #3 中,translation有一列translation_key = 'XYZ'(与表 #2 中的列的值相同description)和列Translation

我对TRANSLATION表#3 中列的值感兴趣,该值通过表#2 与表#1 相关。

我有以下查询:

SELECT 
    description, c.trans_seq 
FROM 
    Translation a
INNER JOIN
    com_reason_code b ON a.organization_id = b.organization_id
INNER JOIN 
    transaction c ON a.organization_id = c.organization_id
WHERE 
    c.trans_seq = '500' 

我得到了超过 1000 个结果,c.trans_seq = 500但是如果我运行这个查询

SELECT * 
FROM transaction 
WHERE trans_seq = '500' 

我只得到一排。老实说,我不知道我做错了什么。

标签: sql

解决方案


在没有实际看到表结构和数据的情况下,我会根据您的描述尽可能地填写空白,并且每个表只有 1 条记录,因为我不知道您在表数据中的变化。

create table transactions (organization_id int, reason_code nvarchar(2), trans_seq int)
create table reasoncode (organization_id int, reason_code nvarchar(20), descriptions nvarchar(100))
create table translations (organization_id int, translation nvarchar(100), translation_key nvarchar(100))

insert transactions
select 1, 'B5', 500

insert reasoncode
select 1, 'B5', 'Big Bad Boy 5'

insert translations
select 1, 'Little Red 2', 'Big Bad Boy 5'


select a.trans_seq, c.translation
from transactions a
        inner join reasoncode b on a.organization_id = b.organization_id and a.reason_code = b.reason_code
            inner join translations c on b.organization_id = c.organization_id and b.descriptions = c.translation_key
where a.trans_seq = 500

drop table transactions
drop table reasoncode
drop table translations

这将为您提供结果,但是您可能/将需要根据表的结构和数据进行修改。


推荐阅读