同一欄位多ID儲存名稱對映

2021-12-29 20:29:06 字數 1480 閱讀 6946

在資料庫設計時,為了減少表儲存的記錄數,對於1對多的關係可以儲存在同乙個記錄中,例如某乙個應用會被多個人使用,有一種儲存方法如下:

這樣會造成記錄數會越來越多,還有一種方法可以用2條記錄儲存上述資料:

第一種方法的好處就是顯示員工名稱非常方便,和員工資訊表關聯即可;第二種方法如果要顯示維護人員的姓名就非常麻煩,例如我們有下面的兩張表:

if object_id('[emp]') is not null drop table [emp]

go create table [emp]([員工id] varchar(3),[姓名] varchar(4))

insert [emp]

select '001','張三' union all

select '002','李四' union all

select '003','***'

if object_id('[app]') is not null drop table [app]

go create table [app]([應用id] varchar(6),[應用名] varchar(5),[維護員工id] varchar(11))

insert [app]

select 'app001','應用a','001,002,003' union all

select 'app002','應用b','002,003'

要求的結果是對於app表顯示維護員工的姓名,那麼可以將問題分解,一步步求解。對於「001,002,003」這個如果要顯示其名稱,那麼可以用下面的語句:select ','+e.[姓名] from emp e

where charindex(','+e.[員工id]+',',','+'001,002,003'+',')>0

for xml path('')

得到的結果如下  

如果要對app表中的每一條記錄都實現這樣的結果怎麼做呢

select distinct

[應用id],

[應用名],

[維護員工id],

stuff((select ','+e.[姓名] from emp e

where charindex(','+e.[員工id]+',',','+t.維護員工id+',')>0

for xml path('')

),1,1,'') as 維護員工姓名

from app t

最終結果  

Mysql 同一欄位多值模糊查詢

同一欄位多值模糊查詢,使用多個or進行鏈結,效率不高,但沒有更好的解決方案。有看到charindex 關鍵字,可查詢結果並不是模糊,舉個栗子 例如select from table where charindex name 張三,李四 0 二 同一值多字段模糊查詢,使用concat關鍵字,舉個栗子 ...

多事務併發更新同一字段,引入鎖

總結注意下面的例子 事務1事務2 begin begin select data from test where id 1 得到 ab select data from test where id 1 得到 ab update test set data cb where id 1 update t...

oracle 批量更改所有表的同一字段型別

經常需要oracle中的所有的字段的型別更改為另外乙個型別,可以考慮利用如下 此處的demo為將nvarchar2轉為varchar2型別並且字段長度保持不變。declare cursor c tab is select from user tab columns t where t.data ty...