记一次Oracle数据库in语句事故

作者: SpaceCat | 来源:发表于2018-10-18 23:51 被阅读5次

1、前情介绍

有个数据处理的活比较着急,从同事的代码中拷贝了一段SQL语句,其中,包含如下的语句:

SELECT *
FROM a
WHERE col IN
    (SELECT col
     FROM b
     WHERE b_col=col_val)

这段sql并不难懂,就是返回a表中col的值满足in子句中查询条件的结果。但是,我在实际中遇到的情况是,这个in子句一直不生效,这个语句也不报错。查了半天,最后发现b表没有名为col的列。

2、原因分析

如果b表没有col列时,这个语句就相当于:

SELECT *
FROM a
WHERE 'a' IN
    (SELECT 'a'
     FROM b
     WHERE b_col=col_val)

只要子查询能够查会结果,这个in子句就会返回true。这样,就导致了这个筛选条件实际不生效。而且,并不报错,在实际中特别不好分析。

3、场景复现

为了复现这个场景,这里用如下的表结构和数据:

CREATE TABLE Persons
(
Name varchar(255),
Address varchar(255)
);
INSERT INTO Persons VALUES ('Bill Gates', 'Beijing');
INSERT INTO Persons VALUES ('Kobe Byrant', 'Los Angeles');
CREATE TABLE Citys
(
CityName varchar(255),
ZipCode varchar(255)
);
INSERT INTO Citys VALUES ('Beijing', '010');

当执行如下查询:

SELECT *
FROM persons
WHERE Name IN
    (SELECT Name
     FROM citys
     WHERE zipCode='010')

得到结果:

NAME ADDRESS
Bill Gates Beijing
Kobe Byrant Los Angeles

而在执行如下查询时,查不到结果:

SELECT *
FROM persons
WHERE Name IN
    (SELECT Name
     FROM citys
     WHERE zipCode='251718')

4、写在最后

这种问题,在学校那会儿,肯定有一大堆语料强调过。然而,这种问题,不结结实实被坑一次,应该不会长记性。
接下来,推荐两个SQL在线测试的网站:

相关文章

  • 记一次Oracle数据库in语句事故

    1、前情介绍 有个数据处理的活比较着急,从同事的代码中拷贝了一段SQL语句,其中,包含如下的语句: 这段sql并不...

  • 黑马 Oracle数据库 百度网盘分享

    01-Oracle数据库-第01天(SQL语句) 02-Oracle数据库-第02天(SQL语句) 03-Orac...

  • Oracle创建用户(CREATE USER语句)

    CREATE USER语句创建一个数据库帐户,允许您登录到Oracle数据库。 语法 Oracle/PLSQL 中...

  • PHP与MySQL操作大全

    MySQL与SQL语句的操作 Mysql比较轻量化,企业用的是Oracle,基本的是熟悉对数据库,数据表,字段,记...

  • 使用PLSql出现oracle提交语句被加锁事件异常

    oracle数据库提交确认 1.昨天在做功能测试 时候,出现简单的oracle提交语句被加锁事件。 下面是两条语句...

  • SQL之WHERE语句

    SQL语句是数据库查询语句,可以应用在各种数据库操作软件中,比如Mysql,Oracle,因此SQL语句学一套就基...

  • jmeter-oracle&mysql执行多条sql语句设置

    oracle执行多条sql语句数据库连接设置 oracle的sql语句执行需要借助存储器进行执行,1.首先在JDB...

  • GreenDao

    前言:数据库:MySQL、Oracle、Sqlite 一. 复习SQL语句(结构化查询语言) 1.SQL语句分类 ...

  • Oracle数据库学习整理(一)

    Oracle 基础知识 查询数据 本节将学习如何从Oracle数据库中查询数据。 ●Select语句-演示如何查询...

  • GreenDao

    数据库:MySQL、Oracle、Sqlite 一. 复习SQL语句(结构化查询语言) 1.SQL语句分类 DDL...

网友评论

    本文标题:记一次Oracle数据库in语句事故

    本文链接:https://www.haomeiwen.com/subject/vbsezftx.html