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_Oracle_Join - Fatal编程技术网

两个表之间的SQL连接帮助

两个表之间的SQL连接帮助,sql,oracle,join,Sql,Oracle,Join,我有两张桌子a和b 表b包含表a的子集。我想获取表a中不在表b中的所有id id id id是使用此SQL尝试的公共列,但它不起作用从表a中选择名称,其中名称不在表b中 select unique name from table a inner join table b on a.id = b.id; 感谢您的帮助您需要在此处使用左外连接。这将从TableA中检索所有值,仅检索与TableB匹配的值,然后在WHERE子句中,您可以测试TableB值是否为NULL,只返回

我有两张桌子a和b

表b包含表a的子集。我想获取表a中不在表b中的所有id id id id是使用此SQL尝试的公共列,但它不起作用从表a中选择名称,其中名称不在表b中

select unique name
from table a inner join
     table b
     on a.id = b.id;  
感谢您的帮助

您需要在此处使用左外连接。这将从TableA中检索所有值,仅检索与TableB匹配的值,然后在WHERE子句中,您可以测试TableB值是否为NULL,只返回不匹配的TableA值:

 SELECT UNIQUE tableA.id FROM tableA LEFT OUTER JOIN tableB ON a.id = b.id WHERE b.id IS NULL;

只需选择表b中不存在的a的id

select a.id 
from tab_a 
where a.id not in (select b.id from tab_b)

一种方法是通过使用左外部联接来使用JNEVILS方式

在oracle中,您还可以使用exists:


请看一下SQL减号运算符,它有时实现为SQLite中的除外

select id from TableA minus select id from TableB;
select id from TableA except select id from TableB;

请试试这个它对我有用

从选择中选择* a、 身份证, a、 名字, COUNTb.name作为count 从 a.name=b.name上的左外连接b 按a.id、a.name C分组,其中C.count=0


这种方式比左外联接更好,并且为空。它们应该是相同的。@GordonLinoff它们可能是相同的,但不需要。使用exists语法使优化器使用反联接,这使优化器可以自由选择联接的顺序取决于索引等。这可能会导致更快的执行。看见但我原以为它会和以前一样:。要验证这一点,您可以在执行计划中查找,在执行计划中,您可以在左侧外部联接语法OraDB12c中看到一个额外的左侧外部联接。@ChrᴉZ你说得有点对。我简单的谷歌查询表明,左连接速度更快:。但实际上是ANSI/ISO SQL。如果你在询问之前擅长谷歌搜索,你将来的工作效率会更高。这是一个常见的SQL问题,比它需要的复杂得多。它肯定能工作!为什么你认为这很复杂??很抱歉,我没有在SQL FIDLE中正确地转录它。它确实有效。至于复杂性,您已经加入了表,因此外部表上的简单IS NULL过滤器就足够了,就像JNevill所做的那样。计数/子查询是不必要的。有什么问题吗?这将生成一个空白的resultcode edited,应返回a中未显示在B中的ID列表
select id from TableA minus select id from TableB;
select id from TableA except select id from TableB;