主鍵由多列組成的查詢問題

2021-09-12 02:29:18 字數 1316 閱讀 4037

一般情形下乙個表的主鍵是由乙個字段組成,這樣對於多條資料的查詢就是直接用in即可,但是如果乙個表的主鍵是由多個字段組成直接用in就會出現錯誤,簡單起見,這裡舉例使用主鍵是由兩個字段組成。

案例資料

表名是testtable,主鍵是由empid與ename聯合組成

empid

ename

mark

1112

asrgqwrg

1113

asrgr

1212

srgrg

1115

aerhgerherh

1213

etrhethetjh

現在想要查詢第一條和最後一條資料,也就是主鍵為11,12以及12,13組成的資料。

如果直接使用:select * from testtable where empid in ('11', '12') and ename in ('12', '13')

那麼會出現四條資料,也就是id組成為11,12和11,13和12,12以及12,13的四條資料,因為使用兩個in是根據排列組合來查詢的。所以不可以使用這種方式。

實現方式

可以通過以下三種方式來實現:

直接實現

select

*from testtable where

((empid =

'11'

and ename =

'12')or

(empid =

'12'

and ename =

'13'

))

對於這種方式如果需要對id進行拼接。

第二種方式使用 || 符號進行拼接

select

*from testtable where empid || ename in

('11'

||'12'

,'12'

||'13'

)

這種方式也是需要通過迴圈進行拼接。

第三種方式是通過臨時表資料來進行查詢

select

*from

(select t.

*, empid || ename remark from testtable t) m where m.remark in

('1112'

,'1213'

);

這裡是現將主鍵值進行拼接在內部表中查詢出來,再在外面將主鍵id拼接成乙個字串,然後直接使用in即可。

SQL Distinct處理多列的問題

今天在做ssis的etl工作時,其中乙個left join元件的執行結果總是會多出一些記錄。分析了一下,該問題的原因是右表中作為關聯的那一列資料有重複。left join的執行策略可以理解為根據左表的每一條記錄的關聯欄位去對照右表的關聯字段,如果右表的關聯字段存在重複,就會生成重複的記錄。如果左表存...

plsql檢視主鍵 如何查詢乙個表的主鍵列名

本帖最後由 yulihua49 於 2011 9 21 16 07 編輯 在這個表裡 desc all cons columns name null?type owner not null varchar2 30 constraint name not null varchar2 30 table ...

mysql 查詢多列不重複的資料

語法 select distinct 列名稱 from 表名稱 如果要查詢某列完全不同的值,可以這樣用distinct。如果是多列呢?這時只用distinct明顯不能實現。比如 要查詢firstname和address完全不同的資料 想要查詢如下結果的資料 使用多列分組查詢則可以實現該查詢要求 se...