看板 P_chippclass
作者 標題 [#]Sql - JOIN 讓其中一欄的值變成Column名稱
時間 2016-05-11 Wed. 18:07:47
把在PTT發的文轉回來放著
[ansi]
作者 myhome6206 (Rice) 看板 Database
標題 [SQL ] JOIN 讓其中一欄的值變成Column名稱
時間 Tue May 10 18:13:43 2016
───────────────────────────────────────
(針對 SQL 語言的問題,用這個標題。請用 Ctrl+Y 砍掉這行)
資料庫名稱:MySQL
資料庫版本:5.X
內容/問題描述:
我有兩個Table
一個是
Table:1 Table:2
id data id key value
-------- ------------
1 xxx 1 A aaa
2 xxx 1 B bbb
2 A xxx
2 B yyy
然後可以join這兩個table 變成
id data A B
------------------
1 xxx aaa bbb
2 xxx xxx yyy
雖然說我覺得這有點智障,應該是在設計的時候就把A B當作Table1的column
才對,是因為這次從wordpress原有的架構去改的,也沒不能動原本的架構了
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.229.141.163
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1462875226.A.7D9.html
[SQL ] JOIN 讓其中一欄的值變成Column名稱 - 看板 Database - 批踢踢實業坊
(針對 SQL 語言的問題,用這個標題。請用 Ctrl+Y 砍掉這行) 資料庫名稱:MySQL 資料庫版本:5.X
(針對 SQL 語言的問題,用這個標題。請用 Ctrl+Y 砍掉這行) 資料庫名稱:MySQL 資料庫版本:5.X
作者 chippclass (善假狼賺錢中) 看板 Database
標題 Re: [SQL ] JOIN 讓其中一欄的值變成Column名稱 時間 Tue May 10 19:06:14 2016
───────────────────────────────────────
※ 引述《myhome6206 (Rice)》之銘言:
: (針對 SQL 語言的問題,用這個標題。請用 Ctrl+Y 砍掉這行)
: 資料庫名稱:MySQL
: 資料庫版本:5.X
: 內容/問題描述:
: 我有兩個Table
: 一個是
: Table:1 Table:2
: id data id key value
: -------- ------------
: 1 xxx 1 A aaa
: 2 xxx 1 B bbb
: 2 A xxx
: 2 B yyy
: 然後可以join這兩個table 變成
: id data A B
: ------------------
: 1 xxx aaa bbb
: 2 xxx xxx yyy
: 雖然說我覺得這有點智障,應該是在設計的時候就把A B當作Table1的column
: 才對,是因為這次從wordpress原有的架構去改的,也沒不能動原本的架構了
線上SQL : http://sqlfiddle.com/#!9/6b390/3
看完題目後一分鐘內的直覺解法
所以有可能不是最佳解
我是這樣想的:tb1 和 tb2 你想合在一起可是不知道怎麼處理 key
所以我第一步就想:如果沒有key怎麼做?
tb1 tb3
id data id value
-------- ----------
1 xxx 1 aaa
2 xxx 2 xxx
阿就直接join阿,只是把tb3 的 value 欄位名稱改成A就是了
同理,key=B時也是一樣的做法,所以join兩次就解決
所以,下一個問題就是可以由 tb2 得到 tb3 和 tb4 嗎?
那就用 select where
key
='A' 這樣的條件就可以所以把上面的幾個子問題合併後
最後就是那個靠直覺想出來的答案
-----
把SQL貼過來好了,如果線上SQL服務掛了也可以看
-----
建立測試用假資料:
create table tb1 (
id
int ,data
varchar(5));
insert into tb1 (id,data) values (1,'xxx'),(2,'xxx');
create table tb2 (
id
int ,key
char(1),value
varchar(5));
insert into tb2 (id,
key
,value
) values(1,'A','aaa'),(1,'B','bbb'),(2,'A','xxx'),(2,'B','yyy');
-----
解:
select *
from tb1
natural left join
(
select id,
value
Afrom tb2
where
key
='A')tb3
natural left join
(
select id,
value
Bfrom tb2
where
key
='B')tb4
;
--
※ 作者: chippclass 時間: 2016-05-11 18:07:47
※ 看板: P_chippclass 文章推薦值: 0 目前人氣: 0 累積人氣: 307
回列表(←)
分享