你會用Oracle多欄位in嗎?

2021-01-08 百度經驗

Oracle功能強大,在日常的應用中性能優越,使用的人比較多。

in的用法也很普及,不過很少見到對多個欄位進行in操作

本文就來分享一下如何在多個欄位中進行in操作

先看看Oracle單個欄位使用in的場景

SQL:

select t.TABLE_NAME, t.TABLESPACE_NAME

  from user_tables t

 where t.TABLESPACE_NAME in ('EXAMPLE', 'USERS');

in的另一種常見用法

SQL:

select t.TABLE_NAME, t.TABLESPACE_NAME

  from user_tables t

 where t.TABLESPACE_NAME in (select 'EXAMPLE' from dual);

多個欄位怎麼寫呢?

這樣的:

select t.TABLE_NAME, t.TABLESPACE_NAME

  from user_tables t

 where (t.TABLE_NAME, t.TABLESPACE_NAME) 

     in ('LOCATIONS', 'EXAMPLE');

Let's have a try!

Excepton has happened!

ORA-00920:無效的關係運算符

WHY?

試試另一個寫法,如下所示。

執行下看看先。

成功了!!!

SQL:

select t.TABLE_NAME, t.TABLESPACE_NAME

  from user_tables t

 where (t.TABLE_NAME, t.TABLESPACE_NAME) 

 in (select 'LOCATIONS', 'EXAMPLE' from dual);

可以看到成功執行的多欄位in,結果一個table,即是一個二維數組。

剛才失敗嘗試中使用in ('LOCATIONS', 'EXAMPLE')的描述,和一個欄位時的用法完全一樣。

Oracle會認為(不管哪個語法檢驗器會這樣認為)in左右兩邊的欄位數不匹配,

不匹配就直接報錯了。

因此正常的寫法,多個欄位時in後面應該是一個二維數組,sql如下。

執行下看看。

成功了!!!

SQL:

select t.TABLE_NAME, t.TABLESPACE_NAME

  from user_tables t

 where (t.TABLE_NAME, t.TABLESPACE_NAME) 

 in (

    ('LOCATIONS', 'EXAMPLE')

    );

相關焦點

  • 踩坑oracle dbms_job簡單使用
    有興趣的完全可以拋棄此文揚長而去觀摩其他大佬的文章~要執行的sql還有job.submit裡邊job名字後面,都要記得加分號,不然可能同樣會引起編譯異常,養成好習慣記得加上最好啦哈哈哈。job number在聲明declare後系統會給你分配一個,同樣用job window創建時,無需畫蛇添足手動添加作業務號,我還沒試過,有興趣的可以踩踩更大的坑哈哈哈。
  • 零基礎學Oracle之2:開始使用oracle
    而oracle則力推java,把java虛擬機內嵌到oracle中。[oracle@wl database]$ ./runInstaller 在資料庫軟體目錄下執行這個安裝,類似於windows的setup
  • 零基礎學Oracle之4:理解oracle的啟動與關閉
    2) 查找預設spfile文件,就是spfile.ora, 啟動instance3) 查找initSID.ora這個文件並啟動instance4) 使用預設pfile,也就是在敲命令時STARTUP PFILE = $ORACLE_HOME/dbs/initDBA1.ora,直接用指定的
  • 如何用SQL語句添加和修改欄位?
    用SQL語句添加欄位並不難,下面小編整理了SQL添加和修改欄位的基本命令,希望對各位小夥伴有所幫助。增加欄位:alter table 表名 add 欄位名 type not null default 0在指定位置插入新欄位:alter table 表名 add [column] 欄位名 欄位類型 是否可為空 comment '注釋' after
  • GBase 8s兼容Oracle漫談——數據類型篇
    具體如下:1)CHARCHAR類型,定長字符串,會用空格填充來達到其最大長度。CHAR欄位最多可以存儲2,000位元組的信息。2)VARCHARVARCHAR是標準SQL的寫法,可變長字符串,可以存儲空字符串。3)VARCHAR2變長字符串,與CHAR類型不同,是oracle特有的欄位,它不會使用空格填充至最大長度。
  • Oracle資料庫參數優化參考
    下面為一些參數調優參考:一、db_file_multiblock_read_count:oracle讀取數據有兩種方式:1)通過rowid(即索引掃描)2)通過全表掃描如果是全表掃描時,oracle會一次讀取多個blocks,每次讀取的塊數將受初始化參數db_file_multiblock_read_count和作業系統的
  • oracle 查詢昨天記錄專題及常見問題 - CSDN
    好麼,原來是計時器溢出了,一檢查我的主機:bash-2.03$ uptime10:00pm up 500 day(s), 14:57, 1 user, load average: 1.31, 1.09, 1.08bash-2.03$ dateFri Nov 19 22:00:14 CST 2004剛好到事發時是497天多一點
  • 零基礎學Oracle之6:Oracle數字字典和動態視圖的理解
    2、數字字典(DD)1)在執行數據定義語言(definition language,DDL)語句或有些數據操縱語言 (data manipulation language ,DML) 語句時會更新數據字典2)有幾個特點存儲在system表空間它是由sys擁有由oracle server自動維護。
  • oracle 查詢 今天、昨天、本周、本月、本季度的所有記錄
    好麼,原來是計時器溢出了,一檢查我的主機:bash-2.03$ uptime10:00pm up 500 day(s), 14:57, 1 user, load average: 1.31, 1.09, 1.08bash-2.03$ dateFri Nov 19 22:00:14 CST 2004剛好到事發時是497天多一點
  • MySQL資料庫教程-數據表欄位約束
    MySQL資料庫教程-數據表欄位約束為保證資料庫中存儲數據的規範化,一般需要在定義欄位時進行欄位規範與約束的定義。在上圖中每一列稱為一個屬性或者欄位。其中第一行的每一列為欄位(屬性)名稱。第一行下面的每一行稱為記錄,即一條記錄。記錄是存儲結構化數據的基本單元。在實際進行欄位設置及值存儲過程中,需要結合實際情況確定每一個欄位存儲數據的格式,規範與要求。這些規範格式等即為欄位的約束。如學生的聯繫電話不允許出現重複,就需要定義與之對應的欄位約束。
  • Oracle分組查詢group by的用法及講解
    但是,對於很多經驗不足的同學,經常會寫錯。今天我們就以Oracle為例,來講解下分組查詢group by的用法。我們接下來使用下聚合函數SELECT SSEX,MAX(SAGE) FROM STUDENT GROUP BY SSEX;注意這條sql語句,select子句中聚合函數使用了SAGE(年齡)這個欄位,那會不會違背了前面所說的 「select子句後的欄位必須來自group by後的分組欄位」這個規律呢,我們來執行一下:能正常執行,成功地按照了性別分組,並且查詢出了性別對應年齡最大的學生
  • Oracle 19C rac集群靜默安裝操作手冊v2.0 for centos7
    /usr/sbin/useradd -u 50012 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,racdba oracle13.echo "oracle" | passwd --stdin oracle14.echo "oracle" | passwd --stdin grid 常見用戶組說明
  • 解決thinkphp的表欄位是中文報錯的問題
    thinkphp提供了模型和資料庫操作資料庫表格數據,但是項目中遇到一個問題是一旦數據表欄位是中文時,就會報錯,"不支持的數據表達式"。數據表欄位是中文時,就會報錯這時怎麼辦呢?我通過查找資料基本上有修改thinkphp資料庫驅動的,但是沒成功。
  • Excel數據透視表高級篩選用欄位和公式組合多個條件並篩選到新表
    像在 Excel 普通表格一樣,高級篩選條件區域既可以用單個條件也可以用多個條件;多個條件的組合方式分為用欄位組合與用公式組合;如果條件比較複雜,用欄位不好組合,可以用公式組合。在數據透視表中,除可篩選普通的欄位外,還可以把分類匯總結果一起篩選。以下就是Excel數據透視表高級篩選用欄位和公式組合多個條件並且把篩選結果複製到新工作表的具體操作方法,實例中操作所用版本均為 Excel 2016。
  • ipv6頭部有多少欄位
    IPv6頭部有多少欄位?ipv6基本報頭包含40 bit,8個欄位。IPv6頭部結構遵循以下規則:1.基本頭部的固定長度:IPv6的基本報文頭長度固定為40位元組,選項和填充從基本報文頭中去除了。2.分段僅由流量的源節點處理:在發送IPv6流量前,源執行PMTU發現,將路由器從分段分組的任務中解脫出來。
  • AQS設計思想與重要欄位詳解
    * 此方法不另外施加任何同步或 volatile 欄位訪問。* 此方法不另外施加任何同步或 volatile 欄位訪問。Condition必須要配合Lock一起使用,因為對共享狀態變量的訪問發生在多線程環境下。一個Condition的實例必須與一個Lock綁定,因此await和signal的調用必須在lock和unlock之間,有鎖之後,才能使用condition嘛。
  • oracle資料庫表的約束和主子表詳解
    一、 表的約束條件 約束條件是施加在表的欄位上的一組限制條件,它使得只有符合限制條件要求的數據才能輸入表。 保證了表中的數據的正確性約束條件包括了:非空和唯一和核對,即not null 和unique和check1.null的含義:不確定,下面舉個例子來說明:3個人去撿蘋果,1人撿到3個, 1人撿到2個,最後一個沒撿到,不能用null表示3個人去撿蘋果,1人撿到3個, 1人撿到2個,最後一個不知道撿到沒撿到,可以用null表示。
  • CAD新手入門攻略:使用CAD軟體中欄位功能來預定義動態文字
    此時就需要使用浩辰CAD軟體中提供的欄位(field)功能了,接下來給大家介紹一下CAD新手入門攻略之使用欄位功能來預定義動態文字的操作技巧吧!欄位(field)功能預定義了一系列動態文字,設計人員只需在列表中選用即可,同時也支持Diesel表達式、LISP變量、系統變量來自定義動態文字。
  • Excel數據透視表你會嗎?
    1、 創建透視表並拖動欄位呈現報表布局操作說明:選中任意單元格--【插入】--【數據透視表】--【創建數據透視表】--根據報表行列呈現需要,在數據透視表欄位列表中選定所需欄位拖放到下方的區間窗口中,完成數據透視表布局。