我遇到了一个奇怪的问题 我在sql数据库中有2个表 所以我想编写一个查询,给出2个表数据的结果 2个表具有相同的列名,如
admission_number
student_name
student_class
我想以给定的图像执行该查询
执行查询后得到的数据将被加载到C#
中的win-form编码的datagridview中
我使用下面的代码来训练它,但它完全与我的问题无关,请帮助我。
private void report()
{
dataGridView4.AutoResizeColumns();
dataGridView4.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
ConnectionStringSettings consettings = ConfigurationManager.ConnectionStrings["smssms"];
string connectionString = consettings.ConnectionString;
SqlConnection cn = new SqlConnection(connectionString);
SqlCommand sqlcmd = new SqlCommand();
SqlDataAdapter sda = new SqlDataAdapter();
DataTable dt = new DataTable();
cn.Open();
//pass query
sqlcmd = new
SqlCommand(@"selectt.admission_number,t.student_name,t.student_class,e.admission_number,e.student_name,e.student_class
from tenthclass_marks as t,eighth_to_ninth_marks as e ", cn);
sda = new SqlDataAdapter(sqlcmd);
//Fill the data in the SQL Data Adapter
sda.Fill(dt);
//Bind it in the DataGrid View
dataGridView4.DataSource = dt;
cn.Close();
}
答案 0 :(得分:4)
您的查询:
select t.admission_number,
t.student_name,
t.student_class,
e.admission_number,
e.student_name,
e.student_class
from tenthclass_marks as t,
eighth_to_ninth_marks as e
正在生成两个表的Cartesian Product。也就是说tenthclass_marks
中的每一行都与每一行eighth_to_ninth_marks
组合在一起,所以如果每个表有5行,最后会有25行(5 x 5)。
您需要使用UNION ALL
来合并结果:
SELECT t.admission_number,
t.student_name,
t.student_class
FROM tenthclass_marks AS t
UNION ALL
SELECT e.admission_number,
e.student_name,
e.student_class
FROM eighth_to_ninth_marks AS e;
对于你的c#值,你也可以清理一下:
private void report()
{
dataGridView4.AutoResizeColumns();
dataGridView4.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
string connectionString = ConfigurationManager.ConnectionStrings["smssms"].ConnectionString;
string sql = @"SELECT t.admission_number,
t.student_name,
t.student_class
FROM tenthclass_marks AS t
UNION ALL
SELECT e.admission_number,
e.student_name,
e.student_class
FROM eighth_to_ninth_marks AS e;";
DataTable dt = new DataTable();
using (var adapter = new SqlDataAdapter(sql, connectionString))
{
adapter.Fill(dt);
}
dataGridView4.DataSource = dt;
}
答案 1 :(得分:0)
在两个表之间使用 UNION ALL
Select * from tenthclass_marks
Union All
Select * from eighth_to_ninth_marks