问一个查询语句,多谢

唯一完美的番茄 2014-11-17 06:29:50
有两个表结构大概是这样:

表A:
ID NAME PARENTKEY
-------------------------------
1 A NULL
2 B NULL
3 C 1

表B:
NAME HEIGHT WEIGHT
---------------------------------
A 10 10
B 20 20
C 30 30

现在我想查询出如下显示结果

NAME HEIGHT WEIGHT
---------------------------------
A 10 10
B 20 20
A 30 30


字段比较多,只是类比一下,还请见谅。
意思就是如果主键有,就在查询结果的NAME里显示主键ID的NAME,而后面字段不变。
两个表只是根据NAME相连。
之前只会一些简单的查询,对这种需要判断的不知道有没有方法在sql里面处理或是需要参考点什么资料呢?多谢
...全文
281 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 17 楼 roundman 的回复:
[quote=引用 15 楼 lxwankkk 的回复:] [quote=引用 13 楼 roundman 的回复:] 总算理解你的意思了…… 用left join应该可以

select case when a2.id is null then a1.name else a2.name end,weight,height
from a a1
left join a a2
on a1.parentkey = a2.id
left join b
on a1.name = b.name
再次谢谢你的回复,结果集里确实包含了我想要的信息,但还有个小问题。。 查询结果把a表中所有name都显示出来,可是在b中是没有对应的,也就是weight等信息查出来都是null, 可我如果用is not null结果就是0,还是会显示出条目,请问如何过滤? 实际表里表a是一个相对比较大的存储,包含了很多,而b里只有一部分name[/quote] 这个简单,连b表的时候改成inner join

select case when a2.id is null then a1.name else a2.name end,weight,height
from a a1
left join a a2
on a1.parentkey = a2.id
inner join b
on a1.name = b.name
[/quote]

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
学习了。。。真心感谢上面所有的朋友! 继续学习ing…… 我想要的结果应该是全部列出b表信息,并在a表中找出对应的,且按照id,parentkey关系列出来,这么看是不是应该用right join更准确?不过也有可能异常删除或修改导致b表里有而a里没有的话如果查出a为null的话好像也不太对,所以保险起见就用inner?
roundman 2014-11-19
  • 打赏
  • 举报
回复
引用 15 楼 lxwankkk 的回复:
[quote=引用 13 楼 roundman 的回复:] 总算理解你的意思了…… 用left join应该可以

select case when a2.id is null then a1.name else a2.name end,weight,height
from a a1
left join a a2
on a1.parentkey = a2.id
left join b
on a1.name = b.name
再次谢谢你的回复,结果集里确实包含了我想要的信息,但还有个小问题。。 查询结果把a表中所有name都显示出来,可是在b中是没有对应的,也就是weight等信息查出来都是null, 可我如果用is not null结果就是0,还是会显示出条目,请问如何过滤? 实际表里表a是一个相对比较大的存储,包含了很多,而b里只有一部分name[/quote] 这个简单,连b表的时候改成inner join

select case when a2.id is null then a1.name else a2.name end,weight,height
from a a1
left join a a2
on a1.parentkey = a2.id
inner join b
on a1.name = b.name
  • 打赏
  • 举报
回复
引用 13 楼 roundman 的回复:
总算理解你的意思了…… 用left join应该可以

select case when a2.id is null then a1.name else a2.name end,weight,height
from a a1
left join a a2
on a1.parentkey = a2.id
left join b
on a1.name = b.name
不知道是不是这么一个逻辑,好像是先遍历了a,然后去b里找;而有的a在b里是没有对应的,就不用显示了,不好意思这个点之前没说清楚
  • 打赏
  • 举报
回复
引用 13 楼 roundman 的回复:
总算理解你的意思了…… 用left join应该可以

select case when a2.id is null then a1.name else a2.name end,weight,height
from a a1
left join a a2
on a1.parentkey = a2.id
left join b
on a1.name = b.name
再次谢谢你的回复,结果集里确实包含了我想要的信息,但还有个小问题。。 查询结果把a表中所有name都显示出来,可是在b中是没有对应的,也就是weight等信息查出来都是null, 可我如果用is not null结果就是0,还是会显示出条目,请问如何过滤? 实际表里表a是一个相对比较大的存储,包含了很多,而b里只有一部分name
WWWWA 2014-11-19
  • 打赏
  • 举报
回复
假设只有1层 SELECT If(c.name Is Null,b.name,c.name) AS 表达式1, a.HEIGHT, a.WEIGHT FROM (a2 AS a LEFT JOIN a1 AS b ON a.NAME = b.NAME) LEFT JOIN a1 AS c ON b.PARENTKEY = c.ID;
roundman 2014-11-19
  • 打赏
  • 举报
回复
总算理解你的意思了…… 用left join应该可以

select case when a2.id is null then a1.name else a2.name end,weight,height
from a a1
left join a a2
on a1.parentkey = a2.id
left join b
on a1.name = b.name
  • 打赏
  • 举报
回复
谢谢各位的回复,现在结果是这样


select case when a1.parentkey is null then a1.name else a2.name end, b.height,b.weight
from a a1,a a2,b
where a1.parentkey=a2.id and a1.name=b.name



我想要的是
name height weight
----------------------------------
a 10 10
b 20 20
a 30 30

else a2.name 好像没出来?
  • 打赏
  • 举报
回复
引用 10 楼 WWWWA 的回复:
应该是递归查询,只取第1层?
多谢回复,不好意思之前不太理解递归查询的意思,大概看了一下,好像也没太了解。。。 但可能表结构是有点树结构的意思,可是查询结果实现的方式,不知道是我哪里没有表述清楚
  • 打赏
  • 举报
回复
引用 19 楼 roundman 的回复:
个人不习惯使用right join 其实right join 和left join一样,只是两张表位置先后关系而已。我习惯使用left join,这样比较符合阅读习惯。 一般都是from 主要的表,left join附属表。 以你要的结果,from b表,left join a表就可以了。
嗯,好,谢谢
roundman 2014-11-19
  • 打赏
  • 举报
回复
个人不习惯使用right join 其实right join 和left join一样,只是两张表位置先后关系而已。我习惯使用left join,这样比较符合阅读习惯。 一般都是from 主要的表,left join附属表。 以你要的结果,from b表,left join a表就可以了。
WWWWA 2014-11-18
  • 打赏
  • 举报
回复
应该是递归查询,只取第1层?
  • 打赏
  • 举报
回复
引用 8 楼 roundman 的回复:
还是没理解楼主的意思…… 就是left join的概念吧? select a.* ,b.weight,b.height from a left join b on a.name = b.name
谢谢回复,你可以看1层的描述,是有条件查询的。 好像不是左连接能得到结果
roundman 2014-11-18
  • 打赏
  • 举报
回复
还是没理解楼主的意思…… 就是left join的概念吧? select a.* ,b.weight,b.height from a left join b on a.name = b.name
WWWWA 2014-11-18
  • 打赏
  • 举报
回复
select case when A.PARENTKEY is null then A1.name else A2.name end ,B.high,B.weight ....
  • 打赏
  • 举报
回复
我用实际表查询也是错误只是到这里,near在第二个表字段那里,一直忙别的事,刚才着手继续弄这个问题。。
  • 打赏
  • 举报
回复
引用 2 楼 rucypli 的回复:
select case when A.PARENTKEY is null then A1.name else A2.name ,B.high,B.weight
from A A1,A A2,B
where A1.PARENTKEY=A2.id and A1.name=B.name


查询如图,mysql版本是5.5.17
WWWWA 2014-11-18
  • 打赏
  • 举报
回复
递归查询?有多少层?
  • 打赏
  • 举报
回复
引用 2 楼 rucypli 的回复:
select case when A.PARENTKEY is null then A1.name else A2.name ,B.high,B.weight from A A1,A A2,B where A1.PARENTKEY=A2.id and A1.name=B.name
感谢版主回复 家里没电脑,我去学学case when,明天试一下!先谢谢了
rucypli 2014-11-17
  • 打赏
  • 举报
回复
select case when A.PARENTKEY is null then A1.name else A2.name ,B.high,B.weight from A A1,A A2,B where A1.PARENTKEY=A2.id and A1.name=B.name
  • 打赏
  • 举报
回复
果然大家都下班了嘛。。。好吧,明天静等
SQL2012软件简介 SQL查询器流传着很多软件,但相信此软件会有它的特别之处,本软件是经多名工程师测试。功能以及效率是有见证。本软件体积优势非常轻巧功能强大,1.4M的大小携带方便。如有建议请发邮件到75934092@qq.com,谢谢你的宝贵建议。话不多说,请看以下功能介绍! 特色功能: (一) 线程查询数据,可看查询结果完成的进度。 (二) 语句编辑强大的语法自动填充功能,可快速填充表或字段 (三) EXCEL导出后台完成。可选中语句导出EXCEL内容! 一、主功能概述 1.shift+空格 内容自动填充 2.预计表总记录数 3.预计表前N行记录 4.生成表字段以豆号分割 字段1,字段2.... 可自定义换行数量 5.显示表的详细信息,字段长度。可直接在查询结果中显示。 6.对查询内容导出EXCEL,高级结果可快速导出。后台处理不会卡程序。在导出大量的数据时可以操作其他操作。软件在导出完成后会检查EXCEL的行数完整性。可以EXCEL信息中查阅。 7.高级结果可拖放分组统计内容 8.对查询结果生成插入语句。可方便夸平台的数据插入 9.查询结果中快速定位查找内容字段位置,可模糊查找 10.可执行存储过程。执行过程中会在对应的GO中报错。可以得知是那行的错误 11.ctrl+1~5 的快捷语句记录。在使用过程中可以按对应的快捷键,在语句编号窗口中插入。临时代码记录10条。可方便用户临时记录编号语句。 12.直接对内容生成IN语句方便查询。 13.快速查询数据库中的表信息,快速查询对应的的字段,可直接筛选想要的字段内容。此功能可让使用者快速知道对应的字段类型! 14.可直接对字段列表的字段进行操作。插入,修改,删除!! 15.查询结果可以直接显示数据库的二进制图片内容 16.排量更新后台,此功能可以对当你手上有大量后台的时候不需要一个个去打开执行,只需要插入到软件的批量更新窗口中执行。执行成功会OK,编辑后再执行,直到全部OK。Ok过的不需重量执行放心! 17.文件传送。可以利用这软件传送文件。如果两个软件连到同一个SQL服务器上。此两个电脑可以互传文件了! 18.EXCEL导入数据库。可以把对应的EXCEL导入到数据库中。EXCEL头为列名。表名定义 19.远程复制,粘贴文件! 20.SQL中实用的语句帮助文档! 二、辅助功能 1.对IP或域名进行端口测试 2.获取当前外网IP地址 3.直接远程连接当前连接IP 4.网整测试当前连接的情况 注:本软件使用次数为10次,因本软件需要大家的建议。功能还在继续完善中,所以免费取得注册码!需要请发邮件或加QQ联系作者。多谢大家的支持! 联系方式:75934092@qq.com

56,687

社区成员

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

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