Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找表中缺少的值_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 查找表中缺少的值

Sql 查找表中缺少的值,sql,sql-server,tsql,Sql,Sql Server,Tsql,我用3个表来比较数据,并找出其中一个表中可能缺少的记录。这些表是一个客户机、一个定义的用户和一个组成员 客户端包含:ClientName、ClientUID 定义的用户包含:ClientUID,LOB 组成员包含:ID,ClientUID 因此,每个中的公共列都是ClientUID 我正在尝试查找defined.lob='value1'的设备,但在member.id='value2'的成员表中不存在这些设备 到目前为止,我的搜索结果是空的,我猜这和不同的连接有关?以下是我正在使用的查询: SEL

我用3个表来比较数据,并找出其中一个表中可能缺少的记录。这些表是一个客户机、一个定义的用户和一个组成员

客户端包含:ClientName、ClientUID

定义的用户包含:ClientUID,LOB

组成员包含: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'
                  )
任何帮助都将不胜感激。 多谢各位

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'的记录;它很可能只检查具有匹配UID的记录


此外,ClientUID和ClientGUID之间似乎存在一些潜在的混淆。这是一个打字错误还是你的数据库中实际上有两个名字?如果是后者,那么有人非常需要用钝器进行教育。

我认为您实际上非常接近,只需要关联不存在的子查询。如果没有样本数据,我还没有测试,但我认为最小的修正将修复您的查询

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
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'
                  )

您能否显示一个您认为可能接近正常工作的查询?另外,您正在使用哪些RDBMS?