sql根據2列進行查詢 確定唯一性

2021-10-04 05:29:26 字數 1406 閱讀 7503

例如**,號碼共同確定唯一性。 突然有個**的需求,入參要10對**和號碼。

要特別注意,如下寫法是錯的,因為這樣查出來的資料會多:

inv_kind in()

and inv_num in

()

無論如何這2個條件要並列,以下幾種寫法都可。

select

*from t_ticket

where

(inv_kind=

'3100191130'

and inv_num =

'30656462')or

(inv_kind=

'021021600111'

and inv_num =

'12588351')or

(inv_kind=

'050001500111'

and inv_num =

'27884930'

)

select

*from t_ticket where

(inv_kind=

'3100191130'

and inv_num =

'30656462'

)union

select

*from t_ticket where

(inv_kind=

'021021600111'

and inv_num =

'12588351'

)union

select

*from t_ticket where

(inv_kind=

'050001500111'

and inv_num =

'27884930'

)

select

*from t_ticket

where

(inv_kind,inv_num)in(

('3100191130'

,'30656462'),

('021021600111'

,'12588351'),

('050001500111'

,'27884930'

))

各種實現都不是很優雅,只能說這樣的需求太**。

如果in的數量實在多,每次都手動拼,有一定的缺陷。

1、in 多條的話,超過一定數量,會非常影響效能。

2、如果有幾千條,那麼1次200條。也要執行很多次。

一種方案

新建乙個表或者檢視,把資料放進去,然後進行關聯查詢。

1、資料量大一些也沒有關係。

2、多列的處理也不太費事。

如果in的資料固定了,這種方式不錯。 如果是動態的資料,那麼還是手動拼吧。

SQL 列屬性(主鍵 自增長 唯一鍵)

1.1 null和default null就是空,default就是預設值,在建立表的時候使用的 create table my default name varchar 10 not null 名字不允許為空 age int default 18 年齡預設為18 只增加乙個名字 1.2 列描述 列...

根據日期查詢的一些sql

文章 發布於2020年7月14日 根據日期查詢的一些sql 查詢資料 查詢上個月的資料 select fromcount referralwhere period diff date format now y m date format update time,y m 1 查詢本月資料 select...

sqlserver按照一列進行分組查詢方法

效果和group by一樣,比group by要方便,相當對group by中同型別的值中新增乙個行號 partition by q q表示要進行分組查詢的字段 order by datatime datatime表示進行排序的字段 ccc表示別名 s.ccc 1表示取分組的第乙個 s是表的別名 s...