![]() |
#2
wxflw2013-05-20 22:41
结合网上资料,经过一天的努力测试,已经搞定,资料如下给给位初学者参考学习,附上成功查询语句格式对照:
资料: 1. 合并查询 合并查询( Union Query )用于合并具有相同字段结构的两个表的内容,如果想在一个结果集中显示多个记录源中的不相关的记录时,这十分有用。 例子: Select * From students Union Select * From students1 该查询结果集把 students 和 students1 中的记录合并到一个结果中,其输出就和原表归档之前一模一样。 注意:缺省情况下,合并查询不会返回重复记录(如果记录归档系统在把记录拷到归档表中后不将相应的记录删除,这时该功能就有用了),可以加上 All 关键字而让合并查询显示重复记录。 例子: Select * From students Union All Select * From students1 该合并查询显示 students 表和 students1 表的内容时,没有对重复记录进行处理 补充: Union 运算符允许把两个或者多个查询结果合并到一个查询结果集中。如果比较 Union 和 Join 两咱运算符,那么 Union 运算符增加行的数量,而 Join 运算符增加列的数量。使用 Union 时应该注意,两个结果中的列的结构必须匹配,数据类型必须兼容等等。 Union 运算符的语法形式如下: Select select_list From clause Where clause Group By clause Having clause Union [All] Select select_list From clause Where clause Group By clause Having clause Order By clause Compute clause 对于 Union 运算符,有下列几点需要说明: ·在默认情况下,Union 运算符删除全部冗余行。如果使用All 选项,那么冗余行不删除。 ·在 Union 语句中的全部 select_list 必须有相同数量的列、兼容的数据类型并且按照同样的顺序出现。 ·在结果集中,列名来自第一个 Select 语句。 2.连接查询 在实际使用过程中经常需要同时从两个表或者两个以上表中检索数据。连接就是允许同时从两个表或者两个以上表中检索数据,指定这些表中某个或者某些列作为连接条件。在 SQL Server 中,可以使用两种连接语法形式,一种是 Ansi 连接语法形式,这是连接用在 From 子句中,另外一种是 SQL Server 连接语句形式,这是连接用在 Where 子句中。 Ansi 连接语法形式如下: Select table_name.column_name,table_name.column_name,... From {table_name [join_type] Join table_name On search_conditions} Where [search_conditions] 在 Ansi 语法形式中,可以 Ansi 连接关键字来确定使用的连接形式。例如: ☆使用 Inner Join 关键字,结果集中仅包含满足条件的行。 ☆使用 Cross Join 关键字,结果集中包含两个表中所有行的组合。 ☆使用 Outer Join 关键字,结果集中既包含那些满足条件的行,还包含那些其中某个表的全部行。 SQL Server 连接语法形式如下所示: Select table_name.column_name,table_name.column_name,... From [table_name,tab 第一种语句如下:(效果不好,重复显示问题严重未解决,请知道的指点一下,这种用法是在表格中横向显示几个表中查询到的相应字段的内容) 'sql = "select 电气通用类.备件编号,电气通用类.名称,电气通用类.提醒标记,设备类.备件编号 from 电气通用类,设备类 where 电气通用类.提醒标记 = 设备类.提醒标记 and 电气通用类.提醒标记 = true and 设备类.提醒标记=true " 格式:'sql = "select 表1.字段1,表1.字段2,表2.字段1,表2.字段2 from 表1,表2 where 表1.字段1 = 表2.字段1 and 表1.字段1 = 查询条件 and 表2.字段1=查询条件 " 'sql = "select 电气通用类.备件编号,电气通用类.名称,设备类.备件编号,设备类.名称,模具类.备件编号,模具类.名称 from ((电气通用类 inner join 设备类 on 电气通用类.提醒标记=设备类.提醒标记) inner join 模具类 on 电气通用类.提醒标记=模具类.提醒标记) where 电气通用类.提醒标记=true" 格式:'sql = "select 表1.字段1,表1.字段2,表2.字段1,表2.字段2 ,表3.字段1,表3.字段2 from ((表1 inner join 表2 on 表1.字段1=表2.字段1) inner join 表3 on 表1.字段1=表3.字段1) where 表1.字段1=查询条件" 效果如下: 只有本站会员才能查看附件,请 登录 第二种句子,已达到我的要求 句子如下: ’sql = "select 备件编号,名称,库存数量 from 电气通用类 where 提醒标记=true union all select 备件编号,名称,库存数量 from 设备类 where 提醒标记=true union all select 备件编号,名称,库存数量 from 模具类 where 提醒标记=true union all select 备件编号,名称,库存数量 from 通用标准件 where 提醒标记=true" 格式:sql = "select 字段1,字段2 from 表1 where 字段1=查询条件 union all select 字段1,字段2 from 表2 where 字段1=查询条件 union all select 字段1,字段2 from 表3 where 字段1=查询条件 union all select 字段1,字段2 from 表4 where 字段1=查询条件" 效果如下: 只有本站会员才能查看附件,请 登录 两个句子查询效果的不同在于join 和 union 两个关健字,前者是横向增加字段来显示后者是增加行来显示,前者重复显示的问题个人猜测是几个表查询到的记录数量不同引起的,有待明天继续测试。 inner join 和 union all 带了参数,原因请看上面的资料。 这个问题烦了我两晚一天,今天把它拿出来晒晒,晒干为止 ![]() ![]() ![]() |
一个是 查询出的结果在输出的时候总是重复显示
只有本站会员才能查看附件,请 登录
附件图,
还有一个问题是
我需要的是把几个表的结果竖着连接下去显示,可是现在是横着显示的,该怎么做?在线等指点。
sql = "select 电气通用类.备件编号,电气通用类.名称,设备类.备件编号,设备类.名称,模具类.备件编号,模具类.名称 from ((电气通用类 inner join 设备类 on 电气通用类.提醒标记=设备类.提醒标记) inner join 模具类 on 电气通用类.提醒标记=模具类.提醒标记) where 电气通用类.提醒标记=true"
rs.Open sql, cn, 3, 3
If rs.RecordCount > 0 Then
Set MSHFlexGrid1.DataSource = rs
end if