选择文本值而不是ID内部加入另一个表

时间:2016-11-11 14:08:15

标签: sql sql-server join

我现在有两张桌子,我试图通过内连接来获取一些文字值。我有一个保存数据的字段。用户可以从组合框/文本框中选择数据,然后保存 - 但是我从组合框中保存的值是ID而不是文本值。现在我尝试加入表并抓取文本值而不是ID以显示在数据网格视图中。

这是我的表格的样子

return _users.Collection.Aggregate([{ "$limit": 10 }]).ToList();

我试图......

tbl1
OrigValue             NewValue             FieldName
12                     13                   Dept
17                     18                   Position
9                      10                   Cost
Samm                   Sammy                Name

tblDefinitions
ID            Name                Field 
9             Microsoft           Seller
10            Adobe               Seller
12            Finance             Dept
13            Research            Dept
17            Manager             Position
18            Entry               Position

问题在于,如果你查看tbl1中的第3条记录,它会显示9和10,它们可以在tblDefinitions中引用,但字段名称不在tblDefinitions中。我试图只加入字段名称匹配的两个表,并按原样显示其他所有表。

期望的最终结果....

Select * from tbl1 and inner Join tblDefitions to get text values

3 个答案:

答案 0 :(得分:0)

你必须加入tblDefinitions两次。外部联接,因为可能缺少匹配。然后使用COALESCE显示找到的值或默认值。

select 
  coalesce(ov.name, cast(t1.origvalue as varchar)) as origvalue,
  coalesce(nv.name, cast(t1.newvalue as varchar)) as newvalue,
  t1.fieldname
from tbl1 t1
left join tbldefinitions ov on t1.origvalue = ov.id and t1.fieldname = ov.field
left join tbldefinitions nv on t1.newvalue = nv.id and t1.fieldname = nv.field;

答案 1 :(得分:0)

这会匹配您的密钥,以便显示原始Name和新密码。

SELECT tblDefinitions.Name AS 'Original Value', t.Name AS 'New Value', FieldName
FROM tbl1 
JOIN tblDefinitions ON tbl1.OrigValue = tblDefinitions.ID 
JOIN tblDefinitions t ON tbl1.NewValue = t.ID

但是,我不了解tbl1中FieldName与tblDefinitions中Field之间的关系。

答案 2 :(得分:0)

您没有使用id列的新旧值两次加入'tblDefinitions'来获取其文本值。

select 
        isnull(tdo.Name,cast(t1.OrigValue as varchar)) OrigValue         
       ,isnull(tdn.Name,cast(t1.NewValue as varchar)) NewValue
       ,t1.FieldName 
 from
    tbl1 t1
    left join tblDefinitions tdo on  t1.FieldName = tdo.Field and t1.OrigValue = tdo.ID
    left join tblDefinitions tdn on t1.FieldName = tdn.Field and t1.NewValue = tdn.Id