作者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有AB两种,如果今天key只有A这一种时,怎麽做?
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` A
from tb2
where `key`='A'
)tb3
natural left join
(
select id,`value` B
from tb2
where `key`='B'
)tb4
;
--
◣▁▁ ◢ ▄▄▄▄▄▄▄ . * ▃ ▃
▁▁◢ ◤◢狼出没注意! . ˊ . ▎ ▅▂ ▂▅
◢ ◢◤ ◣ ▄▄▄▄▄▄▄ . ▊
◥▁▃▂▁ ◣ ◆↗http://chippclass.99k.org/↙◆
◥ ▇▇▇ ◣ ◆↗telnet://bs2.to (P_chippclass)↙◆
▇▆▅▂ ψchippclass ▅▂▁
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.161.177.167
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1462878377.A.689.html
※ 编辑: chippclass (1.161.177.167), 05/10/2016 19:09:30
1F:推 cutekid: 推(Y) 05/11 15:40
※ 编辑: chippclass (1.161.175.154), 05/11/2016 23:00:05