请教如何实现如下sql查询

lxw2100 2014-11-04 04:17:10
A表
UID ATTR1 ATTR2
1 A B
2 C D
3 E F
B表
UID ATTR_NAME v1 v2
1 ATTR1 0 1
1 ATTR2 1 0
2 ATTR1 1 0
2 ATTR2 1 1
3 ATTR1 1 1

想要得到以下查询结果:
UID ATTR1 ATTR2
v1 1 B
v2 1 A

UID ATTR1 ATTR2
v1 2 C D
v2 2 D

UID ATTR1 ATTR2
v1 3 E
v2 3 E

请教如何实现?
...全文
145 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxw2100 2014-11-05
  • 打赏
  • 举报
回复
引用 1 楼 zlloct 的回复:
[quote=引用 楼主 lxw2100 的回复:] 请教如何实现?

SELECT 'V1' REMARKS,
        B1.UID,
       (SELECT IF(B.V1<>0,A.ATTR1,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR1')ATTR1,
       (SELECT IF(B.V1<>0,A.ATTR2,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR2')ATTR2
FROM( SELECT DISTINCT UID FROM B)B1
UNION ALL
SELECT 'V2' REMARKS,
        B1.UID,
       (SELECT IF(B.V2<>0,A.ATTR1,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR1')ATTR1,
       (SELECT IF(B.V2<>0,A.ATTR2,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR2')ATTR2
FROM( SELECT DISTINCT UID FROM B)B1
ORDER BY UID,REMARKS
[/quote] 测试后确实满足需求,多谢!
jdk_8_l 2014-11-05
  • 打赏
  • 举报
回复
左外连接,右外连接,全外连接,试试
CT_LXL 2014-11-04
  • 打赏
  • 举报
回复
引用 楼主 lxw2100 的回复:
请教如何实现?

SELECT 'V1' REMARKS,
        B1.UID,
       (SELECT IF(B.V1<>0,A.ATTR1,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR1')ATTR1,
       (SELECT IF(B.V1<>0,A.ATTR2,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR2')ATTR2
FROM( SELECT DISTINCT UID FROM B)B1
UNION ALL
SELECT 'V2' REMARKS,
        B1.UID,
       (SELECT IF(B.V2<>0,A.ATTR1,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR1')ATTR1,
       (SELECT IF(B.V2<>0,A.ATTR2,NULL) FROM A,B WHERE A.UID=B.UID AND B.UID=B1.UID AND B.ATTR_NAME='ATTR2')ATTR2
FROM( SELECT DISTINCT UID FROM B)B1
ORDER BY UID,REMARKS

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧