当前位置: 首页 > 面试题库 >

如何使用join编写“(in)(ot)” SQL查询

鞠建安
2023-03-14
问题内容

可以请一些人提供如何使用联接编写以下sql查询的方法。我不希望尽量不要使用 in ,我也想替换 where 条件。

SELECT d1.Short_Code
FROM domain1 d1
WHERE d1.Short_Code NOT IN (
  SELECT d2.Short_Code
  FROM Domain2 d2
)

我正在使用SQL Server 2008


问题答案:

本文:

  • NOT IN与NOT EXISTS与LEFT JOIN / IS NULL:SQL Server

如果您感兴趣的话。

简而言之,此查询:

SELECT  d1.short_code
FROM    domain1 d1
LEFT JOIN
        domain2 d2
ON      d2.short_code = d1.short_code
WHERE   d2.short_code IS NULL

可以工作,但是效率不如NOT NULL(或NOT EXISTS)构造。

您还可以使用以下命令:

SELECT  short_code
FROM    domain1
EXCEPT
SELECT  short_code
FROM    domain2

这既不使用NOT IN也不使用WHERE(甚至不使用联接!),但是这将删除所有重复项(domain1.short_code如果有)。



 类似资料:
  • 问题内容: 我有很多这样的SQL查询: 这些查询必须在不同的数据库引擎(MySql,Oracle,DB2,MS-Sql,Hypersonic)上运行,所以我只能使用通用的SQL语法。 在这里,我读到,使用MySql时,该语句未经过优化,而且速度确实很慢,因此我想将其切换为。 我试过了: 但这没有考虑到关键字。 问题:如何使用该方法消除重复的行? 问题答案: 要使用JOIN编写此代码,可以使用内部选

  • 问题内容: 问题答案: 这是从MySQL数据库知识库中获得的: LIMIT子句可用于约束SELECT语句返回的行数。 LIMIT接受一个或两个数字参数,这两个参数都必须是非负整数常量(使用预处理语句时除外)。 为了使查询正常工作,您需要将其编写为 准备好的语句 ,然后执行该 语句 。

  • 问题内容: 我有一个查询,看起来像这样: 我需要能够在IN子句中对列表进行参数化,以将其写为JDBC PreparedStatement。该列表中可以包含任意数量的名称。 是执行此操作的正确方法: 然后建立一个参数列表?还是有更好(更正确)的方法来做到这一点? 问题答案: 简而言之,您不能开箱即用。但是,使用Spring,您可以做自己想做的事情。请参阅如何通过Spring JdbcTemplate

  • 问题内容: 前几天,我在调试一个存储过程,发现一些类似这样的逻辑: 这什么也没返回。我以为它与“ <>”看起来有点奇怪,所以我将其更改为“ NOT IN”,然后一切正常。我想知道为什么会这样?这是一个非常古老的过程,我不确定该问题已经解决了多长时间,但是当发现此问题时,我们最近从SQL Server 2005切换到了SQL Server 2008。“ <>”和“ NOT IN”之间的真正区别是什么

  • 问题内容: 我有此查询,它运行良好 从此查询中,我从我的位置(这是我的第一张表)中选择所有3 KM的餐厅。 但是我需要从3Km中的食品接头中选择AVG等级。 该查询也运行完美: 但是我需要添加这两个查询,通过它们我可以选择所有那些食品接头及其等级AVG。 问题答案: 只需放置子查询,您将得到结果:

  • 问题内容: 下面是我的SQL代码: 表已正确索引。可以重写此代码以获得更好的性能吗? 问题答案: 您也可以尝试EXISTS: