表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啥的。。。并没有看懂。。。谢谢啦。。。 |
|
你说的太乱,如果男女员人表可以查询,分别查两个不就完了
|
|
加的这个是工号的查询条件呀,比如查询条件是部门A,工号123456.照分别查询的话,grid上显示的表1中部门A全部员工的名字,只有工号123456这人后面有信息,其他的人后面字段全是空白 |
|
就是根据部门+姓名 去表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 |
这个可以 谢谢,这样写的话,如果查询的时候没加工号,只要部门下所有人的信息,会查不出数据吗? |
|
where table1.depart = “” and table3.No=123
这个地方动态组织下就可以了,根据需要加上and table3.No=123 |
|
left join (以及inner join)是入门基础。应该找一本专门的 sql语言入门书系统地学习一下。 |
|
好,谢谢,表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;//返回数据表 } |