php - 请教一条sql查询语句
高洛峰
高洛峰 2017-04-11 10:37:54
[PHP讨论组]

有下面两个表

desk表结构
desk_id     left_id     right_id
1            3           null
2           null          2
3            1            2

user表结构
user_id    name
1          小明
2          小红
3.         小丽

left_id 与 user_id 对应

想得到这样一个结果, 把left_id 替换成 white, right_id 替换成 black

desk_id      color     name
1            white      小丽
2.           black      小红 
3            white      小明
3.           black      小红

我的做法是两条sql语句查询, 然后再把结果合并在一起

select desk_id, white as color, name from desk inner join user on user_id = left_id where left_id is not null;

select desk_id, black as color, name from desk inner join user on user_id = left_id where right_id is not null;

能不能只用一条sql语句得到呢 , 或者还有其它更好的办法 ?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
PHP中文网

题目我没细看,如果你的两条select正确,最简单的做法就是,把你上面的两条已经写好的select语句,用union all连接.查一下union all的用法,你就清楚了

黄舟

最终结果的骨架相当于一次inner join

test=# select * from desk d inner join "user" u
test-#   on d.left_id=u.user_id or d.right_id=u.user_id;

 desk_id | left_id | right_id | user_id | name
---------+---------+----------+---------+------
       1 |       3 |          |       3 | 小丽
       2 |         |        2 |       2 | 小红
       3 |       1 |        2 |       1 | 小明
       3 |       1 |        2 |       2 | 小红
(4 行记录)

我们只要把left_idright_iduser_id的各种组合映射到color就行了。也即当user_id = left_idcolor=white,否则color=black

test=# select desk_id, name,
test-#   case when user_id = left_id then 'white' else 'black'
test-#     end as color
test-# from desk d inner join "user" u
test-#   on d.left_id=u.user_id or d.right_id=u.user_id;

 desk_id | name | color
---------+------+-------
       1 | 小丽 | white
       2 | 小红 | black
       3 | 小明 | white
       3 | 小红 | black
(4 行记录)

这里假定leftright不会是同一个人(否则结果中只有一行)。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号