表一:
組名
成員1id
成員2id
成員3id
示例數據:
沖鋒組 1 2 3
後衛組 2 3 4
表二:
成員id
成員姓名
示例數據:
1 張三
2 李四
3 王五
4 陸二
要求結果
沖鋒組 張三 李四 王五
後衛組 李四 王五 陸二
復制代碼 代碼如下:
--建立測試環境
Create Table 表1(組名 varchar(10),成員1id varchar(10),成員2id varchar(10),成員3id varchar(10))
--插入數據
insert into 表1
select '沖鋒組','1','2','3' union
select '後衛組','2','3','4'
Create Table 表2(成員id varchar(10),成員姓名 varchar(10))
--插入數據
insert into 表2
select '1','張三' union
select '2','李四' union
select '3','王五' union
select '4','陸二'
--測試語句
select a.組名,
成員1=(select 成員姓名 from 表2 b where a.成員1id=b.成員id),
成員1=(select 成員姓名 from 表2 b where a.成員2id=b.成員id),
成員1=(select 成員姓名 from 表2 b where a.成員3id=b.成員id)
from 表1 a
--刪除測試環境
Drop Table 表1
Drop Table 表2
/*
組名 成員1 成員1 成員1
---------- ---------- ---------- ----------
沖鋒組 張三 李四 王五
後衛組 李四 王五 陸二
(所影響的行數為 2 行)
*/
復制代碼 代碼如下:
select
a.組名,
成員1 = max(case b.成員id = a.成員1id then b.成員姓名 end),
成員2 = max(case b.成員id = a.成員2id then b.成員姓名 end),
成員3 = max(case b.成員id = a.成員3id then b.成員姓名 end),
from
表一 a,
表二 b
group by
a.組名
復制代碼 代碼如下:
select
a.組名,
成員1 = max(case b.成員id = a.成員1id then b.成員姓名 end),
成員2 = max(case b.成員id = a.成員2id then b.成員姓名 end),
成員3 = max(case b.成員id = a.成員3id then b.成員姓名 end)
from
表一 a,
表二 b
group by
a.組名
復制代碼 代碼如下:
select a.組名,
成員1=(select 成員姓名 from 表2 b where a.成員1id=b.成員id),
成員1=(select 成員姓名 from 表2 b where a.成員2id=b.成員id),
成員1=(select 成員姓名 from 表2 b where a.成員3id=b.成員id)
from 表一 a
復制代碼 代碼如下:
正解是
select 表1.組名,
(select 表1.成員姓名 from 表2 b where 表1.成員1id=表2.成員id) as 成員1id,
(select 表1.成員姓名 from 表2 b where 表1.成員2id=表2.成員id) as 成員2id,
(select 表1.成員姓名 from 表2 b where 表1.成員3id=表2.成員id) as 成員3id
from 表1,表2