用sql 语句 怎么样查询一张表的所有内容 和 另一张表的部分内容? 求解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用sql 语句 怎么样查询一张表的所有内容 和 另一张表的部分内容? 求解相关的知识,希望对你有一定的参考价值。

参考技术A SELECT A表需要的列名,B表需要的列名[,……] FROM A,B WHERE A.列=B.列
SELECT A表需要的列名,B表需要的列名[,……] FROM A LEFT JOIN B ON A.列=B.列
SELECT A表需要的列名,B表需要的列名[,……] FROM A RIGHT JOIN B ON A.列=B.列
SELECT A表需要的列名,B表需要的列名[,……] FROM A OUT JOIN B ON A.列=B.列
几种方式都可以,看你的条件需要的是那种..
正常的来说,第一个SQL 就可以满足你了本回答被提问者采纳
参考技术B 加入需要查询A表的所有内容,B表的列a为3的内容,如果二者没有什么关系,就用笛卡尔积,即select A.*,B.a
from A,B
where B.a=3;
如果二者有联系,而你想通过此联系来查询,则需要用连接操作(假设相同属性为b)
select A.*,B.a
from A,B
where B.a=3 and A.b=B.b
参考技术C 例如:查选第一张表的为a_table,第二张表为b_table(查询第二张表的ID和NAME字段)

select a.*,b.id,b.name from a_table a,b_table b;
参考技术D 读取7个技能到数组,和工作岗位逐一比较

sql存储过程从一张表中查询到的值作为另一张表的新的字段

现要建立一存储过程(Proc_OldTable)。要求如下:建立一个sql表(SQL_Server 2005)表名为OldTable.
内含有字段:序号 smallint identity(1,1) Primary key ,考号 varchar(12) null ,班级 smallint not null ,学号 smallint not null,姓名 varchar(10) not null。另外从 Subject表中获取科目(如语文、数学等)作为新建的 OldTable表的字段。(位于姓名之后。全部为 smallint null 科目顺序为按序号升序)Subject表中科目不是固定的。Subject的字段为(序号,科目,满分,优秀,良好,及格,是否计入总分)。请各路高手帮忙,先谢谢你们!

参考技术A

如果两表字段相同,则可以直接这样用。
insert into table_a select * from table_b
如果两表字段不同,a表需要b中的某几个字段即可,则可以如下使用:
insert into table_a(field_a1,field_a2,field_a3) select field_b1,field_b2,field_b3 from table_b
还可以加上where条件

参考技术B create procedure Proc_OldTable
as
begin
declare @subject varchar(max)
declare @sql varchar(max)

set @sql = '

if exists (select 1
            from  sysobjects
           where  id = object_id(''OldTable'')
            and   type = ''U'')
   drop table OldTable
   go
   create table OldTable ( 序号 smallint identity(1,1) Primary key ,考号 varchar(12) null ,
 班级 smallint not null ,学号 smallint not null,姓名 varchar(10) not null '

set @subject = ''
select @subject = @subject + ',' + 科目 + ' int '
from ( select distinct 科目 from Subject表 ) a

set @sql = @sql + @subject
exec (@sql)
end

追问

exec proc_OldTable
消息 102,级别 15,状态 1,第 8 行
'go' 附近有语法错误。
消息 102,级别 15,状态 1,第 10 行
'int' 附近有语法错误。

追答
drop procedure Proc_OldTable
go

create procedure Proc_OldTable
as
begin
    declare @subject varchar(max)
    declare @sql varchar(max)
     
    set @sql = '
    if exists (select 1
            from  sysobjects
           where  id = object_id(''OldTable'')
            and   type = ''U'')
   drop table OldTable
   ;
   create table OldTable ( 序号 smallint identity(1,1) Primary key ,考号 varchar(12) null ,
                                         班级 smallint not null ,学号 smallint not null,姓名 varchar(10) not null '
 
    set @subject = ''
    select @subject = @subject + ',' + 科目 + ' int '
    from ( select distinct 科目 from Subject表 ) a
 
    set @sql = @sql + @subject + ')'

    exec (@sql)
end

追问

语句没问题,exec 执行也可以通过。但与要求有一点距离。(科目顺序为按序号升序)。你这句 select distinct 科目 from Subject 没有按要求升序。我自己加上Order by 序号 提示错误:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效

追答set @subject = ''
    select @subject = @subject + ',' + 科目 + ' int '
    from ( select distinct 序号,科目 from Subject表 ) a order by 序号
    
    这部分这样改一下,应该就可以了。

本回答被提问者和网友采纳

以上是关于用sql 语句 怎么样查询一张表的所有内容 和 另一张表的部分内容? 求解的主要内容,如果未能解决你的问题,请参考以下文章

在oracle中怎么把一张表的数据插入到另一张表中

SQL语句循环一张表的一个字段ID,根据这个字段的内容去修改另一张表,

SQL 两张表合并 (两张表的列都相同)

SQL SERVER,一张表中,有多个字段关联另一张表,怎么写SQL语句?

sql语句 怎么从一张表中查询数据插入到另一张表中

两个表匹配,匹配上把一张表的值复制到另一张表的sql语句怎么写