sql 两个表两个字段怎么sql查询表中所有字段同一个字段显示

Access俱乐部
Access入门经典视频《运用Access实现降本增效》(免费)[] | 免费《Access五节必修课》[]
?&&&&?&&&&?&&&&?&&&&
您的位置:  > >
一张表的多个字段关联另外同一张表的一个字段
来源:&&点击数:9006&&评论数:1 &|&&|&
时 间: 15:11:49
作 者:&&&ID:24791&&城市:上海
摘 要:多字段关联同一张表
问题背景:
表:商品表,数据表,数据表明细
商品表字段:商品代码(主键),类别代码,品牌代码,品名,单位代码。
数据表:数据类别代码(主键),数据类别
数据表明细:数据代码,数据,数据类别代码(外键)
其中,类别代码,品牌代码,单位代码都来自数据表明细的数据。
多个字段关联一个表
如果在查询中,将商品表和数据表明细表关联,这样就只能关联一个字段,
例如,假设关联了类别代码
那么,查询中就只能显示商品代码,类别
品牌代码和单位代码依然不能显示出相应的数据。
在表中用组合框关联是同样的道理,如果关联了类别代码,那么其他的两个就不能显示出来。
解决办法:
将数据表明细分为多个条件查询,这里
将数据表明细分为:类别数据查询,品牌数据查询,单位数据查询
再创建查询,将商品表和上述三个查询分别关联起来,就可以在一个查询里将所有数据显示,而不用只关联一个数据,需要在窗体中用组合框显示其他的两个数据了。
Access软件网官方交流QQ群 (群号:)
      
&&&&【&&】&&&&【&&】&&&&【&&】&&&&【&&】
Access网店
价格:¥50 元
价格:¥50 元
价格:¥100 元
(01-01 22:34)
(12-31 12:10)
(12-31 10:08)
(12-30 20:43)
(12-30 15:06)
(12-30 11:56)
(12-29 16:26)
(12-28 22:47)
(12-28 17:48)
(12-28 16:07)
Access软件网 版权所有 CopyRight
提供支持 本站特聘法律顾问: 李慧 律师博客访问: 388645
博文数量: 152
注册时间:
认证徽章:
Oracle 10g OCP、11g OCP
oracle交流群:
ITPUB论坛APP
ITPUB论坛APP
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Oracle
1)创建表tb1
SQL> create table tb1(id int,name varchar2(10));
表已创建。
SQL> insert into tb1(id) values(1);
已创建 1 行。
SQL> insert into tb1(id) values(2);
已创建 1 行。
SQL> insert into tb1(id) values(3);
已创建 1 行。
SQL> insert into tb1(id) values(10);
已创建 1 行。
提交完成。
2)创建表tb2
SQL> create table tb2(id int,name varchar2(10));
表已创建。
SQL> insert into tb2 values(1,'A');
已创建 1 行。
SQL> insert into tb2 values(2,'B');
已创建 1 行。
SQL> insert into tb2 values(3,'C');
已创建 1 行。
提交完成。
3)查看两张表数据
SQL> select * from tb1;
&&&&&&& ID NAME
---------- ----------
&&&&&&&& 1
&&&&&&&& 2
&&&&&&&& 3
&&&&&&& 10
SQL> select * from tb2;
&&&&&&& ID NAME
---------- ----------
&&&&&&&& 1 A
&&&&&&&& 2 B
&&&&&&&& 3 C
SQL> update tb1 t set t.name=select b.name from tb2 b where t.id=b.&& --错误写法
update tb1 t set t.name=select b.name from tb2 b where t.id=b.id
&&&&&&&&&&&&&&&&&&&&&&& *
第 1 行出现错误:
ORA-00936: 缺失表达式
已写入 file afiedt.buf
& 1& update tb1 t set t.name=(select b.name from tb2 b where t.id=b.id)
& 2* where exists(select *from tb2 b where t.id=b.id)
已更新3行。
4)更新后tb1表的内容:
SQL> select * from tb1;
&&&&&&& ID NAME
---------- ----------
&&&&&&&& 1 A
&&&&&&&& 2 B
&&&&&&&& 3 C
&&&&&&& 10
SQL> select * from tb2;
&&&&&&& ID NAME
---------- ----------
&&&&&&&& 1 A
&&&&&&&& 2 B
&&&&&&&& 3 C
5)如果tb2表id不唯一,更新会是什么情况?
SQL> insert into tb2 values(1,'D');
已创建 1 行。
提交完成。
SQL> select * from tb2;
&&&&&&& ID NAME
---------- ----------
&&&&&&&& 1 A
&&&&&&&& 2 B
&&&&&&&& 3 C
&&&&&&&& 1 D
SQL> update tb1 t set t.name=(select b.name from tb2 b where t.id=b.id)
& 2& where exists(select *from tb2 b where t.id=b.id);
update tb1 t set t.name=(select b.name from tb2 b where t.id=b.id)
&&&&&&&&&&&&&&&&&&&&&&&& *
第 1 行出现错误:
ORA-01427: 单行子查询返回多个行
1. 对于子查询的值只能是一个唯一值,不能是多值。
2. 子查询在绝大多数情况下,最后面的where EXISTS子句是重要的,否则将得到错误的结果。
&&& 且where EXISTS子句可用另一方法代替,如上。最后的子句是对a表被更新记录的限制,如无此句,对于a表中某记录,如在b表中关联不到对应的记录,则该记录被更新字段将被更新为null。
&&& where EXISTS子句就是排除对a表中该情况的记录进行更新。
阅读(2019) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
一个爱笑,却总笑得傻傻的家伙
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
studentName
studentScore
一、拼接多个字段的值select studentID+‘-’+studentName+'-'+studentScore AS studentInfo from student结果:&二、一个字段多条记录的拼接select stuff((select '|'+studentName from student for xml path ('')),1,1,'')结果:&解析:①stuff:1、作用stuff(param1, startIndex, length, param2)将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。2、参数param1一个字符数据表达式。param1可以是常量、变量,也可以是字符列或二进制数据列。startIndex一个整数值,指定删除和插入的开始位置。如果&startIndex或 length 为负,则返回空字符串。如果startIndex比param1长,则返回空字符串。startIndex可以是 bigint 类型。length&一个整数,指定要删除的字符数。如果 length 比param1长,则最多删除到param1&中的最后一个字符。length 可以是 bigint 类型。3、返回类型如果param1是受支持的字符数据类型,则返回字符数据。如果param1是一个受支持的 binary 数据类型,则返回二进制数据。4、备注如果结果值大于返回类型支持的最大值,则产生错误。②for xml path:&&& for xml path有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。参考:http://blog.csdn.net/rolamao/article/details/7745972
阅读(23767)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'SQL 拼接多个字段的值&一个字段多条记录的拼接',
blogAbstract:'例如student表:\n \n
studentID\n
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:9,
publishTime:4,
permalink:'blog/static/',
commentCount:2,
mainCommentCount:2,
recommendCount:1,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'一个爱笑,却总笑得傻傻的家伙',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}只有两个字段用一个sql语句查询出某个学生的姓名、成绩以及在表中的排名
投稿:mdxy-dxy
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了只有两个字段用一个sql语句查询出某个学生的姓名、成绩以及在表中的排名,需要的朋友可以参考下
昨天去面试时遇到一个这样的问题:
有一张成绩表,只有两个字段,姓名和成绩。怎样用一个sql语句查询出某个学生的姓名,成绩以及在表中的排名?
一时间我也想不出具体实现,我就提了两种思路:一种是通过join关联一个查询出他排名的sql语句;一种是通过group by来实现。
回答得连自己都觉得有点心虚。请问大家如何实现呢?
假设:表名字为Course,两个字段分别为name和score
实现语句:
SELECT 学生,成绩,
(SELECT COUNT(*) FROM 表 WHERE a.成绩&=成绩) AS 排名
FROM 表 AS a
declare @Course table(name varchar(100),cj int)
insert into @Course
select 'a',99
select 'b',66
select 'c',88
select * from (
select (select 1+count(name) from @Course where cj&t.cj) mc,name,cj
from @Course t
where name='b'
如果有成绩相同的记录的时候,goodspeed的语句确实有一些瑕疵,但是我根据他的语句稍微修改了一下就很完美了。
SELECT name,score,
(SELECT COUNT(*)+1 FROM course WHERE a.score&score) AS sort
FROM course AS a order by sort
更多请到这里查看
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 sql语句查询表字段 的文章

 

随机推荐