iT邦幫忙

0

T-SQL兩個欄位需要JOIN同一個資料表找對應名稱

各位先進好,

想問個觀念問題,我有如下2個表,XP是記錄修改前跟修改後的部門代號,ME則是記錄代號跟對應的中文名稱,但是依照我原本使用INNER JOIN 只能找一次對應時使用,所以想請教各位當有兩個欄位都要進去找到對應的中文名稱時,應該怎麼連結?謝謝

https://ithelp.ithome.com.tw/upload/images/20210303/20116501bEmKJeNpi8.png

附上建表語法:

--建表
DECLARE @XP AS TABLE
(
   [XP001] varchar(4),
   [XP002] varchar(4)
)

DECLARE @ME AS TABLE
(
   [ME001] varchar(4),
   [ME002] varchar(10)
)

--放入參考資料
INSERT INTO @XP VALUES('A001','A004')
INSERT INTO @XP VALUES('A002','A003')

INSERT INTO @ME VALUES('A001','業務部北區')
INSERT INTO @ME VALUES('A002','業務部中區')
INSERT INTO @ME VALUES('A003','業務部南區')
INSERT INTO @ME VALUES('A004','業務部東區')


如下語法我只能對應其中一個欄位,另一個欄位不知如何進入@ME找到對應名稱

SELECT XP001,ME002,XP002 FROM @XP
INNER JOIN @ME ON XP001 = ME001
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
rogeryao
iT邦大師 1 級 ‧ 2021-03-03 13:29:34
最佳解答
SELECT XP.XP001 AS '修改前部門(XP001)',A.ME002 AS '修改前部門名稱',
XP.XP002 AS '修改後部門(XP002)',B.ME002 AS '修改後部門名稱'
FROM XP 
INNER JOIN ME AS A ON XP.XP001=A.ME001
INNER JOIN ME AS B ON XP.XP002=B.ME001
ORDER BY XP.XP001

Demo

fufujane iT邦新手 5 級 ‧ 2021-03-03 13:49:54 檢舉

感謝答覆,原來有這種用法,謝謝!

1
微笑
iT邦新手 1 級 ‧ 2021-03-03 13:33:02
SELECT XP001 修改前部門,ME1.ME002 修改前部門名稱,XP002 修改後部門,ME2.ME002 修改後部門名稱 FROM @XP
INNER JOIN @ME ME1 ON XP001 = ME1.ME001
INNER JOIN @ME ME2 ON XP002 = ME2.ME001
fufujane iT邦新手 5 級 ‧ 2021-03-03 13:51:24 檢舉

感謝答覆,茅塞頓開,我再去磨練磨練~

0
純真的人
iT邦大師 1 級 ‧ 2021-03-03 13:34:55

恩..主鍵是不可異動的~

在我的資料表習慣~
一定分為ID 部門編號 部門名稱
Join的時候~也是Join ID欄位~
只有外在顯示是 部門編號 部門名稱 給人家看的~

fufujane iT邦新手 5 級 ‧ 2021-03-03 13:55:30 檢舉

謝謝回覆,因這個資料表是買ERP系統整套的,我也認為欄位齊全可以增加後續查詢的方便性/images/emoticon/emoticon12.gif

我要發表回答

立即登入回答