SQL查询以查找两个相关表之间缺少的行
我有两张桌子: 表A 身份证件 ABC\U ID 瓦尔 表B 身份证件 ABC\U ID 瓦尔 这两个表通过ABC_ID列直接相互关联 我想查找表A中的所有VAL列值,这些值不存在于表B中的相同ABC_IDSQL查询以查找两个相关表之间缺少的行,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中。我想这正
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 从测试 其中日期>=@开始日期 日期
当@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