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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3826929/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-01 07:43:26  来源:igfitidea点击:

SQL Query to find missing rows between two related tables

sqldatabaseoracle

提问by Fazal

I have two tables:

我有两个表:

Table A

表A

  • ID
  • ABC_ID
  • VAL
  • ID
  • ABC_ID
  • 价值

Table B

表B

  • ID
  • ABC_ID
  • VAL
  • ID
  • ABC_ID
  • 价值

These two tables are directly related to each other through the ABC_IDcolumn.

这两个表通过ABC_ID列直接相互关联。

I want to find all the VALcolumn values in table A which are notpresent in table B for the same ABC_ID.

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

回答by Larry Lustig

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

or

或者

SELECT A.ABC_ID, A.VAL WHERE VAL NOT IN 
    (SELECT VAL FROM B WHERE B.ABC_ID = A.ABC_ID)

or

或者

SELECT A.ABC_ID, A.VAL LEFT OUTER JOIN B 
    ON A.ABC_ID = B.ABC_ID AND A.VAL = B.VAL WHERE B.VAL IS NULL

Please note that these queries do not require that ABC_ID be in table B at all. I think that does what you want.

请注意,这些查询根本不需要表 B 中的 ABC_ID。我认为这就是你想要的。