我有一个成员资格数据库,其中包含链接表:members
和history
,其中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
(它在那里检查是否有任何东西(;很可能,你也不需要在外部查询中使用它。