问候,SO人。
我正在开发一个让我使用Access数据库的项目。这是设置:
我有三张桌子:
Tab1 with employee names, ID#s, Manager names and Manager ID#s.
Tab2 with chat info, employee ID#s and employee names.
Tab3 with Manager ID#s, Manager names and team names.
我目前有一个选择以下内容的查询:
tab2.[employee name], tab2.[employee id], tab3.[chat info], tab1.[manager id], tab1.[manager id], tab3.[team name]
where
tab2.[employee id] = tab1.[employee id] and tab2.[manager id] = tab3.[manager id];
我想要完成的是:如果ID在行的某个位置不匹配,我想有一种方法将“Unknown”放在“Team”字段中。有什么想法吗?
提前致谢!
答案 0 :(得分:5)
也许是这样的:
select tab2.[employee name],
tab2.[employee id],
tab3.[chat info],
tab1.[manager id],
Nz(tab3.[team name], 'Unknown') as [team name]
from (tab2
left join tab1
on tab2.[employee id] = tab1.[employee id])
left join tab3
on tab2.[manager id] = tab3.[manager id]
答案 1 :(得分:1)
SELECT
tab2.[employee name], tab2.[employee id],
tab3.[chat info], tab1.[manager id],
tab1.[manager id],
Nz(tab3.[team name],"Unknown")
FROM (tab2
LEFT JOIN tab1
ON tab2.[employee id] = tab1.[employee id])
LEFT JOIN tab3
ON tab2.[manager id] = tab3.[manager id];
答案 2 :(得分:0)
似乎Access不支持SQL case语句,所以我以前的答案是不正确的。我将它留给那里寻找与SQL兼容的数据库同样问题的人。
显然你可以使用switch语句来达到相同的效果;此示例显示how a switch can be used。希望这更有帮助。
否则,如果可能,切换到真正的DB:)
答案 3 :(得分:0)
好吧,由于你不能使用CASE,我的速度很慢,而Joe使用Nz可能是你最好的选择,但是还有另一种特定于Access的替代方案,如果它适合你的情况更好:
select tab2.[employee name],
tab2.[employee id],
tab3.[chat info],
tab1.[manager id],
Iif(IsNull(tab3.[team name]), 'Unknown', tab3.[team name]) as [team name]
from tab2
left join tab1
on tab2.[employee id] = tab1.[employee id]
left join tab3
on tab2.[manager id] = tab3.[manager id]
在这种情况下,Iif( condition,trueAnswer,falseAnswer )与Nz做同样的事情,但如果你的条件是除了IsNull之外的东西,它可以更多灵活。
答案 4 :(得分:-1)
我不确定Access,但在SQL中通常你会加入你的表,你可以使用CASE语句添加你想要的条件行为;访问可能不支持此。
显示的示例here是合理的标准。
哇,访问查询看起来真的像那样吗?嗯...那么也许就是这样。tab2.[employee name], tab2.[employee id], tab3.[chat info], tab1.[manager id], tab1.[manager id], case when tab3.[team name] is null then 'Unknown' else tab3.[team name] end as [team name]
where
tab2.[employee id] = tab1.[employee id] and tab2.[manager id] = tab3.[manager id];