Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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_Database_Oracle - Fatal编程技术网

SQL查询以查找两个相关表之间缺少的行

SQL查询以查找两个相关表之间缺少的行,sql,database,oracle,Sql,Database,Oracle,我有两张桌子: 表A 身份证件 ABC\U ID 瓦尔 表B 身份证件 ABC\U ID 瓦尔 这两个表通过ABC_ID列直接相互关联 我想查找表A中的所有VAL列值,这些值不存在于表B中的相同ABC_ID SELECT A.ABC_ID, A.VAL FROM A WHERE NOT EXISTS (SELECT * FROM B WHERE B.ABC_ID = A.ABC_ID AND B.VAL = A.VAL) 或 或 请注意,这些查询根本不要求ABC_ID在表B中。我想这正

我有两张桌子:

表A 身份证件 ABC\U ID 瓦尔 表B 身份证件 ABC\U ID 瓦尔 这两个表通过ABC_ID列直接相互关联

我想查找表A中的所有VAL列值,这些值不存在于表B中的相同ABC_ID

SELECT A.ABC_ID, A.VAL FROM A WHERE NOT EXISTS 
   (SELECT * FROM B WHERE B.ABC_ID = A.ABC_ID AND B.VAL = A.VAL)


请注意,这些查询根本不要求ABC_ID在表B中。我想这正是你想要的。

声明@start_date DATETIME='04-01-2021'; 声明@End_date DATETIME='04-30-2021'; 声明@min int 声明@max int 选择@min=mintest\u uid, @max=maxtest\u uid 从测试 其中日期>=@开始日期 日期 选择test\u UID+1作为FirstMissingId,从select test.*中选择nextid-1作为LastMissingId进入tmp,将test\u UID作为nextid从test.*中导入订单 其中,测试UID介于@min和@max测试之间,其中nextid测试UID+1 创建表tmp1 ID INT 去 声明@lastmissingid BIGINT ,@firstmissingid-BIGINT 声明的recscan游标 从tmp中选择firstmissingid、lastmissingid 打开重新扫描 从recscan获取下一个到@firstmissingid、@lastmissingid 而@@FETCH\u STATUS=0 开始 声明@maxcnt int=@lastmissingid 声明@mincnt,int=@firstmissingid


当@Counter时,如果TableB有多条记录具有匹配的ABC_ID和VALRelated,则联接将产生多条记录的副作用:这不起作用,因为内部查询也会为不同的ABC_ID返回VAL。例如,表B的值为1、123、1;2、123、2、3、134、5和表A的值为1、123、1;2,123, 5; 理想情况下,我希望将表A 2、123、5返回EMUS,联接会过滤掉匹配的行,因此只有表B中不匹配的表A行才会加入结果集。由于将显示的行仅从联接的表A侧通过左侧外部提供,因此我认为每一行仅显示一次。@alphaprolix:我不知道这个想法是从哪里开始的,但在这种情况下,您不需要避免使用*。对于查询优化器来说,很明显,您是在检查行的存在,而不是返回数据,并且不会使用列列表。通常,如果答案中包含对代码意图的解释,以及在不引入其他内容的情况下解决问题的原因,那么答案会更有帮助。还请查看以了解如何格式化代码。
SELECT A.ABC_ID, A.VAL FROM A WHERE VAL NOT IN 
    (SELECT VAL FROM B WHERE B.ABC_ID = A.ABC_ID)
SELECT A.ABC_ID, A.VAL LEFT OUTER JOIN B 
    ON A.ABC_ID = B.ABC_ID AND A.VAL = B.VAL FROM A WHERE B.VAL IS NULL