菜鸟求sql语句,大神帮我

xzsjfj2018 2018-07-09 04:21:11
SQL语句求助:B表和A表的“编号”列有相同值,A表的另一列“姓名”列是我想要的数据,怎么样能把“编号”列有相同值的那行的A表“姓名”替换到B表的空列“姓名”列(顺序对应B表的“编号”列),或新建C表也可
图中C表就是我想要的结果

...全文
199 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tom0311 2018-07-12
  • 打赏
  • 举报
回复
select B.编号,A.姓名 from A,B where A.编号=B.编号
Chrisfrog 2018-07-11
  • 打赏
  • 举报
回复
查询 select b.id,a.name from tableA inner join tableB on a.id=b.id
插入 update tableB set b.name from tableA inner join tableB on a.id=b.id
建议用inner join,比where效率要高得多,当你表的数据到百万级别的时候差距很明显。
吉普赛的歌 2018-07-10
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('A') IS NOT NULL DROP TABLE A
IF OBJECT_ID('B') IS NOT NULL DROP TABLE B
GO
CREATE TABLE A(
bh INT,
uname NVARCHAR(10)
)
CREATE TABLE B(
bh INT,
uname NVARCHAR(10),
rq CHAR(8),
zg NVARCHAR(10)
)
GO
INSERT INTO A VALUES (1,'王峰')
INSERT INTO A VALUES (2,'李洋')
INSERT INTO A VALUES (3,'常亮')
INSERT INTO A VALUES (4,'骆强')
INSERT INTO A VALUES (5,'鲁丽')
INSERT INTO A VALUES (6,'李雪')
INSERT INTO A VALUES (7,'康柏')
INSERT INTO A VALUES (8,'吴媛')
INSERT INTO A VALUES (9,'孙宁')
INSERT INTO A VALUES (10,'赵大亮')
GO
INSERT INTO B (bh,rq,zg) VALUES (8,'19780608','赵大')
INSERT INTO B (bh,rq,zg) VALUES (8,'19780608','赵大')
INSERT INTO B (bh,rq,zg) VALUES (8,'19780608','赵大')
INSERT INTO B (bh,rq,zg) VALUES (6,'19810201','赵大')
INSERT INTO B (bh,rq,zg) VALUES (7,'19900915','赵大')
INSERT INTO B (bh,rq,zg) VALUES (1,'19970701','赵大')
INSERT INTO B (bh,rq,zg) VALUES (2,'19820303','赵大')
INSERT INTO B (bh,rq,zg) VALUES (10,'19820303','吴晓')
INSERT INTO B (bh,rq,zg) VALUES (10,'19820303','吴晓')
INSERT INTO B (bh,rq,zg) VALUES (5,'19991118','赵大')
GO
SELECT
b.bh AS [编号]
,(SELECT a.uname FROM A WHERE a.bh=b.bh) AS [姓名]
,rq AS [日期]
,zg AS [主管]
--into C
FROM B


xzsjfj2018 2018-07-10
  • 打赏
  • 举报
回复
1、A表的很多列我都用不到,只想替换这个“姓名”列,B表还有“日期”“主管”“”等列(还有好多列),我希望查询结果里都显示出来。
2、我是超级菜鸟你说的排序字段我听不懂,我就是希望查询结果和B表原来的排列顺序一样不要变, order by 这个排序字段放到什么位置啊?
3、C表是我想要等查询结果!方便的话能给我完整的语句吗? 否则臣妾看不懂啊
吉普赛的歌 2018-07-10
  • 打赏
  • 举报
回复
引用 4 楼 xzsjfj2018 的回复:
同意感谢几位大神,可以查询出了,但是有两个情况我没说清楚。

1、其实这两个表还有很多列,能不能在B表还有很多列,能不能在查询结果里都显示出来呢?

2、查询结果是按照编号从小到大排列的,能不能按照B表原来的顺序排列呢?

1. 那你把其它列再弄几个出来, 这样大家了解你的想法更直观;
2. 原来的顺序?不要想着自动排序这回事, 想有个固定的顺序, 直接加一个排序字段(如果有现成的字段就不用加了), order by 排序字段 就好。
xzsjfj2018 2018-07-10
  • 打赏
  • 举报
回复
错了,是统一
xzsjfj2018 2018-07-10
  • 打赏
  • 举报
回复
同意感谢几位大神,可以查询出了,但是有两个情况我没说清楚。

1、其实这两个表还有很多列,能不能在B表还有很多列,能不能在查询结果里都显示出来呢?

2、查询结果是按照编号从小到大排列的,能不能按照B表原来的顺序排列呢?
吉普赛的歌 2018-07-10
  • 打赏
  • 举报
回复
select  B.编号, A.姓名
from B left join A on a.编号=b.编号
吉普赛的歌 2018-07-10
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('A') IS NOT NULL DROP TABLE A
IF OBJECT_ID('B') IS NOT NULL DROP TABLE B
GO
CREATE TABLE A(
bh INT,
uname NVARCHAR(10)
)
CREATE TABLE B(
bh INT,
uname NVARCHAR(10),
rq CHAR(8),
zg NVARCHAR(10)
)
GO
INSERT INTO A VALUES (1,'王峰')
INSERT INTO A VALUES (2,'李洋')
INSERT INTO A VALUES (3,'常亮')
INSERT INTO A VALUES (4,'骆强')
INSERT INTO A VALUES (5,'鲁丽')
INSERT INTO A VALUES (6,'李雪')
INSERT INTO A VALUES (7,'康柏')
INSERT INTO A VALUES (8,'吴媛')
INSERT INTO A VALUES (9,'孙宁')
INSERT INTO A VALUES (10,'赵大亮')
GO
INSERT INTO B (bh,rq,zg) VALUES (8,'19780608','赵大')
INSERT INTO B (bh,rq,zg) VALUES (8,'19780608','赵大')
INSERT INTO B (bh,rq,zg) VALUES (8,'19780608','赵大')
INSERT INTO B (bh,rq,zg) VALUES (6,'19810201','赵大')
INSERT INTO B (bh,rq,zg) VALUES (7,'19900915','赵大')
INSERT INTO B (bh,rq,zg) VALUES (1,'19970701','赵大')
INSERT INTO B (bh,rq,zg) VALUES (2,'19820303','赵大')
INSERT INTO B (bh,rq,zg) VALUES (10,'19820303','吴晓')
INSERT INTO B (bh,rq,zg) VALUES (10,'19820303','吴晓')
INSERT INTO B (bh,rq,zg) VALUES (5,'19991118','赵大')
GO
--添加两个索引( 如果原本是主键或者有索引就不要加了 )
CREATE INDEX ix_a_bh ON a(bh)
CREATE INDEX ix_b_bh ON b(bh)

--改为 left 连接
--不过,还是要加过滤条件能能用得上索引
--你不过滤,索引也没有用处
SELECT
b.bh AS [编号]
,a.uname AS [姓名]
,rq AS [日期]
,zg AS [主管]
--into C
FROM B
LEFT JOIN A ON a.bh=b.bh


xzsjfj2018 2018-07-10
  • 打赏
  • 举报
回复
引用 8 楼 yenange 的回复:
USE tempdb
GO
IF OBJECT_ID('A') IS NOT NULL DROP TABLE A
IF OBJECT_ID('B') IS NOT NULL DROP TABLE B
GO
CREATE TABLE A(
bh INT,
uname NVARCHAR(10)
)
CREATE TABLE B(
bh INT,
uname NVARCHAR(10),
rq CHAR(8),
zg NVARCHAR(10)
)
GO
INSERT INTO A VALUES (1,'王峰')
INSERT INTO A VALUES (2,'李洋')
INSERT INTO A VALUES (3,'常亮')
INSERT INTO A VALUES (4,'骆强')
INSERT INTO A VALUES (5,'鲁丽')
INSERT INTO A VALUES (6,'李雪')
INSERT INTO A VALUES (7,'康柏')
INSERT INTO A VALUES (8,'吴媛')
INSERT INTO A VALUES (9,'孙宁')
INSERT INTO A VALUES (10,'赵大亮')
GO
INSERT INTO B (bh,rq,zg) VALUES (8,'19780608','赵大')
INSERT INTO B (bh,rq,zg) VALUES (8,'19780608','赵大')
INSERT INTO B (bh,rq,zg) VALUES (8,'19780608','赵大')
INSERT INTO B (bh,rq,zg) VALUES (6,'19810201','赵大')
INSERT INTO B (bh,rq,zg) VALUES (7,'19900915','赵大')
INSERT INTO B (bh,rq,zg) VALUES (1,'19970701','赵大')
INSERT INTO B (bh,rq,zg) VALUES (2,'19820303','赵大')
INSERT INTO B (bh,rq,zg) VALUES (10,'19820303','吴晓')
INSERT INTO B (bh,rq,zg) VALUES (10,'19820303','吴晓')
INSERT INTO B (bh,rq,zg) VALUES (5,'19991118','赵大')
GO
SELECT
b.bh AS [编号]
,(SELECT a.uname FROM A WHERE a.bh=b.bh) AS [姓名]
,rq AS [日期]
,zg AS [主管]
--into C
FROM B




真的超级感谢,竟然这么长的语句,太辛苦您了。不过我要查询的A表6000+行,B表七百多万行,这个不行吧?

shinger126 2018-07-09
  • 打赏
  • 举报
回复
如果只是查询的话
select B.编号,A.姓名 from A,B where A.编号=B.编号
丰云 2018-07-09
  • 打赏
  • 举报
回复
update b set b.name = a.name from tableA a, tableB b where a.id = b.id

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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