MS-Access SQL - 如何实现布尔子查询?



我有一个成员资格数据库,其中包含链接表:membershistory,其中history包含有关成员的任何更新,包括加入日期和离开日期(相关情况(。

这意味着在history表中可能有几个与成员 ID 相关的不同记录

我想创建一个查询,该查询将导致一个电子表格显示成员 ID、姓名以及成员资格状态 - 只要该成员在history表中没有"离开"操作(假设数字 3(,该状态将为"ON"。它可能有不同的操作,并且在history表中的顺序不同(因此"离开"不一定是最后一个操作(。

因此,如果在history中与该成员相关的所有记录中找到与该成员相关的"离开"(3( 记录,则显示的状态应为"OFF"。否则,它为"开"。

我尝试了如下方法,但它不起作用,因为存在部分始终返回 true:

SELECT DISTINCT 
Members.ID, 
Members.MemberName AS Name,
IIF(
EXISTS(
SELECT DISTINCT *
FROM Members LEFT JOIN History ON Members.ID = History.MemberID
WHERE (History.UpdateType <> 3)
),"ON", "OFF"
)
AS Status
FROM Members
ORDER BY Members.ID;

谢谢你的任何建议...

您需要将子查询与外部查询相关联。另外,如果正确关注了您,您要检查是否有任何相关历史记录的类型= 3,在这种情况下将状态设置为'OFF'

SELECT 
Members.ID, 
Members.MemberName AS Name,
IIF(
EXISTS(
SELECT 1
FROM History 
WHERE (Members.ID = History.MemberID AND History.UpdateType = 3)
),
'OFF', 
'ON'
) AS Status
FROM Members
ORDER BY Members.ID;

旁注:你不需要在EXISTS子查询中DISTINCT(它在那里检查是否有任何东西(;很可能,你也不需要在外部查询中使用它。

最新更新