我有一个包含以下字段的主列表
表A
表B
现在我必须从表A中获取Itemdescription以获得表B中的对应值。
答案 0 :(得分:0)
您可以使用简单的JOIN:
editor.putBoolean("Alert_Dialog", false).commit()
答案 1 :(得分:0)
不幸的是,您对样本数据进行了过度混淆,这使得难以理解用例,但我认为您在表A
中混合了元数据和实际数据。哪个太可怕了。我确信这个设计的创始人有理由,但结果总是可怕的查询。
这是一个解决方案,可以说比替代方案更糟糕。
select b.id
, t_a.Itemdescription as a_Itemdescription
, t_b.Itemdescription as b_Itemdescription
, t_c.Itemdescription as c_Itemdescription
from b
left outer join
( select a.itemdescription
, a.item_no
from a
where a.columnname = 'A') t_a
on t_a.item_no b.a
left outer join
( select a.itemdescription
, a.item_no
from a
where a.columnname = 'B') t_b
on t_b.item_no b.b
left outer join
( select a.itemdescription
, a.item_no
from a
where a.columnname = 'C') t_c
on t_c.item_no b.c
说实话,我不确定这是你正在寻找的答案。如果不是编辑您的问题以澄清要求。最好将样本数据作为表中的行提供,并发布从输入派生的示例输出。
答案 2 :(得分:0)
我相信你想要:
select a.*, b.description
from a join
b
on (a.columnname = 'A' and a.itemno = b.A) or
(a.columnname = 'B' and a.itemno = b.B) or
(a.columnname = 'C' and a.itemno = b.C);
在Oracle中,您可以将其缩短为:
select . . .
from a join
b
on (a.columnname, a.itemno) in ( ('A', A), ('B', B), ('C', C));
这可能不是特别有效。所以更有效的方法是:
select a.*, coalesce(ba.description, bb.description, bc.description)
from a left join
b ba
on a.columnname = 'A' and a.itemno = ba.A left join
b bb
on a.columnname = 'B' and a.itemno = bb.B left join
b bc
on a.columnname = 'C' and a.itemno = bc.C;
答案 3 :(得分:0)
使用左联接来完成查询