select 表1的字段1 as 起一个相同的新字段名 from 表1 where 字段 like '%关健字%' union all select 表2的字段1 as 起一个相同的新字段名 from 表2 where 字段 like '%关健字%' union all select 表3的字段1 as 起一个相同的新字段名 from 表1 where 字段 like '%关健字%'查询出来的结果就在同一个结果集里了
以下是我操作多个表,然后赋给数据源控件代码,供参考: protected void getsousuodata() { DataTable dt = new DataTable(); dt.Columns.Add("标题", typeof(string)); dt.Columns.Add("添加时间", typeof(string)); dt.Columns.Add("Html", typeof(string)); string sqlctx = "select Name,AddTime,Html from CtxNews where Name like '%" + strtitle + "%' order by AddTime desc"; SqlDataReader drctx = MySqlHelper.ExecuteReader(sqlctx, CommandType.Text, false); if (drctx.HasRows) { while (drctx.Read()) { DataRow dr=dt.NewRow(); dr["标题"] = drctx["Name"].ToString(); dr["添加时间"] = drctx["AddTime"].ToString(); dr["Html"] = drctx["Html"].ToString(); dt.Rows.Add(dr) ; } } drctx.Close(); string sqlsq = "select Name,AddTime,Html from SqNews where Name like '%" + strtitle + "%' order by AddTime desc"; SqlDataReader drsq = MySqlHelper.ExecuteReader(sqlsq, CommandType.Text, false); if (drsq.HasRows) { while (drsq.Read()) { DataRow dr = dt.NewRow(); dr["标题"] = drsq["Name"].ToString(); dr["添加时间"] = drsq["AddTime"].ToString(); dr["Html"] = drsq["Html"].ToString(); dt.Rows.Add(dr); } } drsq.Close(); GridView1.DataSource = dt.DefaultView[0].DataView; GridView1.DataBind();
程序级别用DataTable.Merge方法DataTable schemaTable ; schemaTable.Merge(DataTable);数据库级别用union all
省表 id 名称 ---------------------------------- 1 上海 2 北京 市表 id 上级id 名称 1 1 上海 ----------------- 区县表 id 上级id 名称 1 1 浦东新区 以上是表结构 查询语句用这样 select 名称,'名称' as 属于 from 省表 union all select a.名称 as 名称,b.属于 as 属于 from 市表 as a inner join 省表 as b on a.上级id=b.id union all select a.名称 as 名称,b.属于 as 属于 from 区表 as a inner join 市表 as b on a.上级id=b.id
select 名称,名称 as 属于 from 省表 ‘这里多写了单引号去了 union all select a.名称 as 名称,b.属于 as 属于 from 市表 as a inner join 省表 as b on a.上级id=b.id union all select a.名称 as 名称,b.属于 as 属于 from 区表 as a inner join 市表 as b on a.上级id=b.id
select 表1的字段1 as 起一个相同的新字段名, '表1' as '属于' from 表1 where 字段 like '%关健字%' union all select 表2的字段1 as 起一个相同的新字段名,'表2' as '属于' from 表2 where 字段 like '%关健字%' union all select 表3的字段1 as 起一个相同的新字段名,'表3' as '属于' from 表1 where 字段 like '%关健字%' 多加一列,表明这个数据来源于哪个表不就可以了?
union all
select 表2的字段1 as 起一个相同的新字段名 from 表2 where 字段 like '%关健字%'
union all
select 表3的字段1 as 起一个相同的新字段名 from 表1 where 字段 like '%关健字%'查询出来的结果就在同一个结果集里了
protected void getsousuodata()
{
DataTable dt = new DataTable();
dt.Columns.Add("标题", typeof(string));
dt.Columns.Add("添加时间", typeof(string));
dt.Columns.Add("Html", typeof(string));
string sqlctx = "select Name,AddTime,Html from CtxNews where Name like '%" + strtitle + "%' order by AddTime desc";
SqlDataReader drctx = MySqlHelper.ExecuteReader(sqlctx, CommandType.Text, false);
if (drctx.HasRows)
{
while (drctx.Read())
{
DataRow dr=dt.NewRow();
dr["标题"] = drctx["Name"].ToString();
dr["添加时间"] = drctx["AddTime"].ToString();
dr["Html"] = drctx["Html"].ToString();
dt.Rows.Add(dr) ;
}
}
drctx.Close();
string sqlsq = "select Name,AddTime,Html from SqNews where Name like '%" + strtitle + "%' order by AddTime desc";
SqlDataReader drsq = MySqlHelper.ExecuteReader(sqlsq, CommandType.Text, false);
if (drsq.HasRows)
{
while (drsq.Read())
{
DataRow dr = dt.NewRow();
dr["标题"] = drsq["Name"].ToString();
dr["添加时间"] = drsq["AddTime"].ToString();
dr["Html"] = drsq["Html"].ToString();
dt.Rows.Add(dr);
}
}
drsq.Close();
GridView1.DataSource = dt.DefaultView[0].DataView;
GridView1.DataBind();
//Session["titless"] = null;
}
然后三个Datatable分别循环取列写到创建的Datatable里面
schemaTable.Merge(DataTable);数据库级别用union all
id 名称
----------------------------------
1 上海
2 北京
市表
id 上级id 名称
1 1 上海
-----------------
区县表
id 上级id 名称
1 1 浦东新区
以上是表结构
查询语句用这样
select 名称,'名称' as 属于 from 省表
union all
select a.名称 as 名称,b.属于 as 属于 from 市表 as a inner join 省表 as b on a.上级id=b.id
union all
select a.名称 as 名称,b.属于 as 属于 from 区表 as a inner join 市表 as b on a.上级id=b.id
union all
select a.名称 as 名称,b.属于 as 属于 from 市表 as a inner join 省表 as b on a.上级id=b.id
union all
select a.名称 as 名称,b.属于 as 属于 from 区表 as a inner join 市表 as b on a.上级id=b.id
然后从三个Datatable分别取数据写到创建的Datatable里面
最后把创建的datatable 做为数据源
如先前是这样:dr["标题"]。最好可以dr[0] 0第几列。
论坛签名======================================================================Yq_pY:你好!
截至 2011-10-31 12:05:28 前:
你已发帖 1 个, 未结贴 1 个;
结贴率为: 0.00%
当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html如何给分和结贴?
http://community.csdn.net/Help/HelpCenter.htm#结帖如何给自己的回帖中也加上签名?
http://blog.csdn.net/q107770540/archive/2011/03/15/6250007.aspx
linq 可以直接查询的,类似 sql
这个类型用于承载你用linq查询出得数据。
/// <summary>
/// 合并数据集中结构相同的数据表
/// </summary>
/// <returns>合并后的数据表</returns>
public DataTable MergeDataTable(DataSet ds)
{
try
{
DataTable mytb=new DataTable();
int i=0;
foreach(DataTable dt in ds.Tables)
{
if(i==0)
{
foreach(DataColumn dc in dt.Columns)
{
mytb.Columns.Add(dc.ColumnName);
}
} foreach(DataRow dr in dt.Rows)
{
object[] ary = new object[dt.Columns.Count];
dr.ItemArray.CopyTo(ary,0); mytb.Rows.Add(ary);//如果mytb没有列,此处会报错
}
i++;
}
return mytb;
}
catch(Exception ex)
{
Response.Write("MergeDataTable():"+ex.Message);
return null;
}
}
#endregion我这个是数据集的,你可以用DataTable数组,稍微改下代码就ok
select 表1的字段1 as 起一个相同的新字段名, '表1' as '属于' from 表1 where 字段 like '%关健字%'
union all
select 表2的字段1 as 起一个相同的新字段名,'表2' as '属于' from 表2 where 字段 like '%关健字%'
union all
select 表3的字段1 as 起一个相同的新字段名,'表3' as '属于' from 表1 where 字段 like '%关健字%'
多加一列,表明这个数据来源于哪个表不就可以了?