如果SQL或Access中的逻辑查询

时间:2010-11-04 21:26:26

标签: sql database ms-access

问候,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”字段中。有什么想法吗?

提前致谢!

5 个答案:

答案 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];