咨询一下3张表的联合查询该怎么写?

.Net技术 码拜 6年前 (2015-05-11) 347次浏览 0个评论
 

表1是员工表,表2是男员工表,表3是女员工表。表1有姓名和部门2个字段,表2和表3表结构一样的,就是男女的区别,里面是一些身高体重住址乱七八糟的字段。  本来查询条件只有部门一项。我是select * from 表1 where 部门=@部门 然后再写了个select 取出了具体的员工信息。select 工号, 字段1,字段2….form 表2 where 姓名=@姓名 and 部门 =@部门 union all select  工号,字段1,字段2….form 表3 where 姓名=@姓名 and 部门 =@部门。(不考虑重名啥的,反正部门+姓名 唯一)现在要求多加个工号的查询条件,表1里没有工号这项,这样该怎么写啊查询语句呀?贴下具体代码 谢谢。网上查了left join啥的。。。并没有看懂。。。谢谢啦。。。

你说的太乱,如果男女员人表可以查询,分别查两个不就完了
引用 1 楼 jointan 的回复:

你说的太乱,如果男女员人表可以查询,分别查两个不就完了

加的这个是工号的查询条件呀,比如查询条件是部门A,工号123456.照分别查询的话,grid上显示的表1中部门A全部员工的名字,只有工号123456这人后面有信息,其他的人后面字段全是空白

引用 1 楼 jointan 的回复:

你说的太乱,如果男女员人表可以查询,分别查两个不就完了

就是根据部门+姓名 去表2,表3中把 工号 地址 联系电话等等数据查询出来,表1中没工号字段,现在要加个工号的查询条件

select   A.*  FROM,  表1.部门
(
SELECT * FROM 表2 
UNION ALL
SELECT * FROM 表3 
) as A
Left join 表1 
on a.姓名=表1.姓名
where  (表1姓名=@姓名   or    A.工号=@工号)   and  表1部门 =@部门  
select   A.*  ,  表1.部门   FROM
(
SELECT * FROM 表2 
UNION ALL
SELECT * FROM 表3 
) as A
Left join 表1 
on a.姓名=表1.姓名
where  (表1姓名=@姓名   or    A.工号=@工号)   and  表1部门 =@部门  
100分
select * from table1 inner join table2 on table1.id=table2.id
where table1.depart = "" and table2.No=123
union all 
select * from table1 inner join table3 on table1.id=table3.id
where table1.depart = "" and table3.No=123
引用 6 楼 starfd 的回复:
select * from table1 inner join table2 on table1.id=table2.id
where table1.depart = "" and table2.No=123
union all 
select * from table1 inner join table3 on table1.id=table3.id
where table1.depart = "" and table3.No=123

这个可以

引用 6 楼 starfd 的回复:
select * from table1 inner join table2 on table1.id=table2.id
where table1.depart = "" and table2.No=123
union all 
select * from table1 inner join table3 on table1.id=table3.id
where table1.depart = "" and table3.No=123

谢谢,这样写的话,如果查询的时候没加工号,只要部门下所有人的信息,会查不出数据吗?

where table1.depart = “” and table3.No=123
这个地方动态组织下就可以了,根据需要加上and table3.No=123
引用 楼主 qq_27733271 的回复:

表1是员工表,表2是男员工表,表3是女员工表。表1有姓名和部门2个字段,表2和表3表结构一样的,就是男女的区别,里面是一些身高体重住址乱七八糟的字段。  本来查询条件只有部门一项。我是select * from 表1 where 部门=@部门 然后再写了个select 取出了具体的员工信息。select 工号, 字段1,字段2….form 表2 where 姓名=@姓名 and 部门 =@部门 union all select  工号,字段1,字段2….form 表3 where 姓名=@姓名 and 部门 =@部门。(不考虑重名啥的,反正部门+姓名 唯一)现在要求多加个工号的查询条件,表1里没有工号这项,这样该怎么写啊查询语句呀?贴下具体代码 谢谢。网上查了left join啥的。。。并没有看懂。。。谢谢啦。。。

left join (以及inner join)是入门基础。应该找一本专门的 sql语言入门书系统地学习一下。

引用 8 楼 starfd 的回复:

where table1.depart = “” and table3.No=123
这个地方动态组织下就可以了,根据需要加上and table3.No=123

引用 8 楼 starfd 的回复:

where table1.depart = “” and table3.No=123
这个地方动态组织下就可以了,根据需要加上and table3.No=123

好,谢谢,表2,表3表结构一样,表1不一样,是用这个inner join? 我明天试试看 先谢谢了

如果单从 left join 关系计算来看,左边如果是“表1”,那么右边就应该是“表2 union all 表3”的总和。如果从 inner join 关系计算来看,那么是“表1 inner join 表2”跟“表1 inner join 表3”两个结果最后再union all合并。

而当加上“部门条件”时都是针对“表1”的条件。

这两种计算方法你应该再根据需求而权衡。不过你这个问题肯定是由于对于sql语言关系运算的基础不劳,练习太少。

如何多表组合查询
  // 查询数据库信息
        // <returns>方法返回DataTable对象</returns>
        private DataTable GetMessage()//codego.net/11/1/1/
        {
            string P_Str_ConnectionStr = string.Format(//创建数据库连接字符串
                @”server=WIN-GI7E47AND9R\LS;database=db_TomeTwo;uid=sa;pwd=”);
            string P_Str_SqlStr = string.Format(//创建SQL查询字符串
                @”SELECT 学生姓名 FROM tb_Student UNION SELECT CONVERT(VARCHAR(20),总分)
FROM tb_grade WHERE 总分>570
UNION SELECT 课程名称 FROM tb_Course”);
            SqlDataAdapter P_SqlDataAdapter = new SqlDataAdapter(//创建数据适配器
                P_Str_SqlStr, P_Str_ConnectionStr);
            DataTable P_dt = new DataTable();//创建数据表
            P_SqlDataAdapter.Fill(P_dt);//填充数据表
            return P_dt;//返回数据表
        }

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明咨询一下3张表的联合查询该怎么写?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!