我有3个表用于比较数据并找到其中一个表中可能缺少记录的位置。这些表是A_Client,A_USER_Defined和A_Group_Member。
A_CLIENT包含:ClientName,ClientUID
A_USER_Defined包含:ClientUID,LOB
A_GROUP_MEMBER包含:ID,ClientUID
因此每个公共列都是ClientUID。
我正在尝试查找设备,其中defined.lob =' value1'并且在member.id =' value2'
的成员表中不存在到目前为止,我的搜索结果是空的,并且猜测它与不同的连接有关吗?这是我正在使用的查询:
SELECT A_CLIENT.ClientName
, A_CLIENT.ClientUID
, A_USER_DEFINED.LOB
FROM A_CLIENT
INNER JOIN
A_USER_DEFINED ON A_CLIENT.ClientUID = A_USER_DEFINED.ClientUID
WHERE A_USER_DEFINED.LOB = 'value1'
AND NOT EXISTS (
SELECT ClientUID
FROM A_GROUP_MEMBER
WHERE GroupID = 'value2'
)
非常感谢任何帮助。 谢谢。
答案 0 :(得分:0)
select cli.ClientName, cli.ClientUID, def.LOB
from A_CLIENT cli
inner join A_USER_DEFINED def on def.ClientGUID = cli.ClientGUID and def.LOB = 'value1'
left join A_GROUP_MEMBER grp on grp.ClientUID = cli.ClientUID and mbr.ID = 'value2'
where mbr.UID is null
select cli.ClientName, cli.ClientUID, def.LOB
from A_CLIENT cli, A_USER_DEFINED def
where def.ClientGUID = cli.ClientGUID and def.LOB = 'value1'
and cli.ClientUID not in (select ClientUID from A_GROUP_MEMBER where GroupID = 'value2')
以及其他各种可能性,具体取决于您的引擎更适合使用哪种类型的连接或谓词
编辑:自我发布答案以来,问题和表/字段名称发生了很大变化。他们似乎已经安定下来,所以我改变了我的代码以适应。
注意:查询中的EXISTS谓词仅检查是否有ID =' value2&#39 ;;它应该很可能只检查具有匹配UID的记录。
此外,ClientUID和客户端 G UID之间似乎存在一些混淆。这是一个错字还是你的数据库实际上有两个名字?如果是后者,则有人迫切需要接受使用钝器的教育。
答案 1 :(得分:0)
select devices.*
from devices
left join member
on devices.ClientUID = member.ClientUID
and devices.lob = 'value1'
and member.id = 'value2'
where member.ClientUID is null
答案 2 :(得分:0)
我认为你实际上非常接近,只需要关联不存在的子查询。没有样本数据我还没有经过测试,但我认为最小的修正可以解决你的问题。
SELECT A_CLIENT.ClientName
, A_CLIENT.ClientUID
, A_USER_DEFINED.LOB
FROM A_CLIENT
INNER JOIN
A_USER_DEFINED ON A_CLIENT.ClientUID = A_USER_DEFINED.ClientUID
WHERE A_USER_DEFINED.LOB = 'value1'
AND NOT EXISTS (
SELECT ClientUID
FROM A_GROUP_MEMBER
WHERE A_GROUP_MEMBER.ClientUID = A_CLIENT.ClientUID
AND GroupID = 'value2'
)
我可能会使用一些表别名,这样更容易阅读,但是ymmv:
SELECT c.ClientName
, c.ClientUID
, u.LOB
FROM A_CLIENT c
INNER JOIN
A_USER_DEFINED u ON c.ClientUID = u.ClientUID
WHERE A_USER_DEFINED.LOB = 'value1'
AND NOT EXISTS (
SELECT 1
FROM A_GROUP_MEMBER g
WHERE g.ClientUID = c.ClientUID
AND GroupID = 'value2'
)