我现在有两张桌子,我试图通过内连接来获取一些文字值。我有一个保存数据的字段。用户可以从组合框/文本框中选择数据,然后保存 - 但是我从组合框中保存的值是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
答案 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