查询两个表中字段个数不同,名称不同的SQL语句

SQL实现多表查询及数据区分
博客介绍了一条SQL语句,可对两个不同结构和字段的表进行查询,并能区分记录所属表。通过“as”统一字段名,用空串或非空串代替不足字段。该语句在站内搜索中很实用,能根据不同表将不同id传入对应显示页面。
此sql语句能对两个不同表不同结构不同字段进行查询,并且能分出哪个记录是属于哪个表中的

有两个表
table1结构如下
idtitlecontent

table2结构如下
idcontentbigclasssmallclass


 sql="select id, title, content,'' as bigclass,'' as smallclass, 'tbl1' as tbl from table1 where title like '%"&keyword&"%' or content like '%"&keyword&"%' union select id, '' as title, content,bigclass,smallclass, 'tbl2' as tbl from table2 where content like '%"&keyword&"%' order by id desc"

这条语句即可实现查询。
以asp为例,则通过
set rs=conn.execute(sql)
while not rs.eof
……
……
response.write rs("tbl")'此值就是判断数据是哪个表的
……
……
rs.movenextwend

分析以上sql语句,其实也就是通过as把两个表中的字段名统一,字段数不够的用('')括号内的,即空串代替,当然如果你愿意也可以用非空串代替如('this is bigclass belong to table2'),这样也可便于区分是哪个表中的数据。此sql语句中巧妙地运用了'tbl1' as tbl这条来判断语句是属于哪个表的,以便对数据进行处理,特别是对于站内搜索,搜索不同表时在一个页面显示结果,根据不同的表把不同的id值传入不同表所对应的显示页面,有的要用readnews.asp有的要用other.asp这类页面,用起来很方便。
欢迎大家一起探讨!
### 如何在SQL Server中查询字段名称 为了获取特定内的所有字段名称,在SQL Server中有多种方法可以实现这一目标。一种常用的方法是从`sys.columns`视图读取数据并将其与`sys.tables`连接起来,通过指定具体的名来过滤结果集。 对于想要了解某张具体内有哪些字段的情况,下面这条命令能够满足需求: ```sql SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName'; ``` 上述语句利用了INFORMATION_SCHEMA.COLUMNS这个系统视图,它包含了当前数据库里所有对象的相关元数据信息[^1]。 如果更倾向于使用sys模式下的系统目录视图,则可采用如下方式: ```sql SELECT C.name AS ColumnName FROM sys.columns C INNER JOIN sys.tables T ON C.object_id = T.object_id WHERE T.name = 'YourTableName'; ``` 这段代码同样实现了相同的功能——返回给定的所有列名。这里选择了`sys.columns`和`sys.tables`两个系统视图,并基于它们之间的关系(即object_id相匹配)进行了内部联接操作[^2]。 另外还有一种更为详细的查询方案,不仅限于获得简单的字段名字,还可以得到更多有关这些字段的信息,比如其数据类型、长度以及定义顺序等属性: ```sql SELECT so.name AS 名称, sc.name AS 字段名, st.name AS 数据类型, sc.length AS 长度, sc.colorder AS 序号 FROM syscolumns sc, systypes st, sysobjects so WHERE st.xtype = sc.xtype AND sc.id = so.id AND so.type = 'U' ORDER BY so.name, sc.colorder; ``` 该查询提供了更加全面的结果展示,适用于那些需要深入了解结构特性的场景下使用[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值