C# 使用c在一个程序中访问两个表#
我有两个表,我想添加这两个表的列。如果TrueResult表的第一列(文件名)等于MyResult表的第一列(文件名),则添加这两个表的第二列和第三列C# 使用c在一个程序中访问两个表#,c#,mysql,C#,Mysql,我有两个表,我想添加这两个表的列。如果TrueResult表的第一列(文件名)等于MyResult表的第一列(文件名),则添加这两个表的第二列和第三列 TrueResult File_Name Pos_Score Neg_Score p46084445 3.25 2.5 p46084231 2.8 1.5 p46084412 1.8 2.9 F_Name P_Sco
TrueResult
File_Name Pos_Score Neg_Score
p46084445 3.25 2.5
p46084231 2.8 1.5
p46084412 1.8 2.9
F_Name P_Score N_Score
p46084231 2.25 1.5
p46084412 3.8 2.5
p46084445 2.8 3.9
private void button1_Click(object sender, EventArgs e)
{
string MyConString = "server=localhost;" +
"database=WordNet;" + "password=zia;" +
"User Id=root;";
MySqlConnection con = new MySqlConnection(MyConString);
MySqlCommand cmd = new MySqlCommand("select * from TrueResult,MyResult where TrueResult.File_Name=MyResult.F_Name;", con);
con.Close();
con.Open();
MySqlDataReader r = cmd.ExecuteReader();
while (r.Read())
{
textBox3.Text = r["Pos_Score.TrueResult"].ToString();
textBox2.Text = r["Neg_Score.TrueResult"].ToString();
textBox1.Text = r["P_Score.MyResult"].ToString();
textBox4.Text = r["N_Score.MyResult"].ToString();
pos = Convert.ToDouble(textBox2.Text);
neg = Convert.ToDouble(textBox3.Text);
post = Convert.ToDouble(textBox1.Text);
negt = Convert.ToDouble(textBox4.Text);
pos1 = pos + post;
neg1 = neg + negt;
MessageBox.Show("pos=" + pos1.ToString() + "neg" + neg1.ToString());
r.Close();
con.Close();
}
}
MyResult
File_Name Pos_Score Neg_Score
p46084445 3.25 2.5
p46084231 2.8 1.5
p46084412 1.8 2.9
F_Name P_Score N_Score
p46084231 2.25 1.5
p46084412 3.8 2.5
p46084445 2.8 3.9
private void button1_Click(object sender, EventArgs e)
{
string MyConString = "server=localhost;" +
"database=WordNet;" + "password=zia;" +
"User Id=root;";
MySqlConnection con = new MySqlConnection(MyConString);
MySqlCommand cmd = new MySqlCommand("select * from TrueResult,MyResult where TrueResult.File_Name=MyResult.F_Name;", con);
con.Close();
con.Open();
MySqlDataReader r = cmd.ExecuteReader();
while (r.Read())
{
textBox3.Text = r["Pos_Score.TrueResult"].ToString();
textBox2.Text = r["Neg_Score.TrueResult"].ToString();
textBox1.Text = r["P_Score.MyResult"].ToString();
textBox4.Text = r["N_Score.MyResult"].ToString();
pos = Convert.ToDouble(textBox2.Text);
neg = Convert.ToDouble(textBox3.Text);
post = Convert.ToDouble(textBox1.Text);
negt = Convert.ToDouble(textBox4.Text);
pos1 = pos + post;
neg1 = neg + negt;
MessageBox.Show("pos=" + pos1.ToString() + "neg" + neg1.ToString());
r.Close();
con.Close();
}
}
示例因为TrueResult表的第一行等于MyResult表的第三行,所以我们添加结果
Pos_Score=2.8+3.25
Neg_Score=3.9 +2.5
我编写以下代码来解决此问题。代码
File_Name Pos_Score Neg_Score
p46084445 3.25 2.5
p46084231 2.8 1.5
p46084412 1.8 2.9
F_Name P_Score N_Score
p46084231 2.25 1.5
p46084412 3.8 2.5
p46084445 2.8 3.9
private void button1_Click(object sender, EventArgs e)
{
string MyConString = "server=localhost;" +
"database=WordNet;" + "password=zia;" +
"User Id=root;";
MySqlConnection con = new MySqlConnection(MyConString);
MySqlCommand cmd = new MySqlCommand("select * from TrueResult,MyResult where TrueResult.File_Name=MyResult.F_Name;", con);
con.Close();
con.Open();
MySqlDataReader r = cmd.ExecuteReader();
while (r.Read())
{
textBox3.Text = r["Pos_Score.TrueResult"].ToString();
textBox2.Text = r["Neg_Score.TrueResult"].ToString();
textBox1.Text = r["P_Score.MyResult"].ToString();
textBox4.Text = r["N_Score.MyResult"].ToString();
pos = Convert.ToDouble(textBox2.Text);
neg = Convert.ToDouble(textBox3.Text);
post = Convert.ToDouble(textBox1.Text);
negt = Convert.ToDouble(textBox4.Text);
pos1 = pos + post;
neg1 = neg + negt;
MessageBox.Show("pos=" + pos1.ToString() + "neg" + neg1.ToString());
r.Close();
con.Close();
}
}
此程序会出现以下错误。错误
“where子句”中的未知列“MyResult.F_Name”
任何人都可以帮助我。从您的查询中,您使用的是all字符,即
*
,因此您没有使用列别名。您将获得以下结果:
File_Name Pos_Score Neg_Score F_Name P_Score N_Score
p46084445 3.25 2.5 p46084445 2.8 3.9
您应该从以下位置更改代码:
textBox3.Text = r["Pos_Score.TrueResult"].ToString();
textBox2.Text = r["Neg_Score.TrueResult"].ToString();
textBox1.Text = r["P_Score.MyResult"].ToString();
textBox4.Text = r["N_Score.MyResult"].ToString();
致:
或者,您可以直接执行以下查询:
SELECT IFNULL(TR.Pos_Score + MR.P_Score, 0) AS PositiveScore
, IFNULL(TR.Neg_Score + MR.N_Score, 0) AS NegativeScore
FROM TrueResult TR
INNER JOIN MyResult MR ON MR.F_Name = TR.File_Name;
并使用以下代码:
pos1 = Convert.ToDouble(r["PositiveScore"].ToString());
neg1 = Convert.ToDouble(r["NegativeScore"].ToString());
从查询中,您使用的是all字符,即*
,因此您没有使用列别名。您将获得以下结果:
File_Name Pos_Score Neg_Score F_Name P_Score N_Score
p46084445 3.25 2.5 p46084445 2.8 3.9
您应该从以下位置更改代码:
textBox3.Text = r["Pos_Score.TrueResult"].ToString();
textBox2.Text = r["Neg_Score.TrueResult"].ToString();
textBox1.Text = r["P_Score.MyResult"].ToString();
textBox4.Text = r["N_Score.MyResult"].ToString();
致:
或者,您可以直接执行以下查询:
SELECT IFNULL(TR.Pos_Score + MR.P_Score, 0) AS PositiveScore
, IFNULL(TR.Neg_Score + MR.N_Score, 0) AS NegativeScore
FROM TrueResult TR
INNER JOIN MyResult MR ON MR.F_Name = TR.File_Name;
并使用以下代码:
pos1 = Convert.ToDouble(r["PositiveScore"].ToString());
neg1 = Convert.ToDouble(r["NegativeScore"].ToString());
我认为您可以在一个查询中完成这一切
SELECT TrueResult.File_Name, Pos_Score + P_Score As Pos_Score, Neg_Score + N_Score AS Neg_Score
FROM TrueResult
INNER JOIN MyResult ON TrueResult.File_Name = MyResult.F_Name;
我认为您可以在一个查询中完成这一切
SELECT TrueResult.File_Name, Pos_Score + P_Score As Pos_Score, Neg_Score + N_Score AS Neg_Score
FROM TrueResult
INNER JOIN MyResult ON TrueResult.File_Name = MyResult.F_Name;
你不应该在查询本身上这样做吗?对我来说似乎更容易。
大致如下:
SELECT File_Name SUM(Pos_Score) SUM(Neg_Score)
FROM TrueResult, MyResult where TrueResult.FileName=MyResult.FileName
GROUP BY TrueResult.File_Name
只是一个草图,这并不完全正确。
您想在mysql之外执行此操作有什么特殊原因吗?您不应该在查询本身上执行此操作吗?对我来说似乎更容易。
大致如下:
SELECT File_Name SUM(Pos_Score) SUM(Neg_Score)
FROM TrueResult, MyResult where TrueResult.FileName=MyResult.FileName
GROUP BY TrueResult.File_Name
只是一个草图,这并不完全正确。
你想在mysql之外做这件事有什么特别的原因吗?我的想法就是:)我想他们也必须考虑空值(如果分数是可空的列)。不过,我不知道MySQL的语法。谢谢你指出Moose先生,我只是假设这个没有NULL
值。无论如何,编辑我的答案:)我的想法:)我想他们也必须迎合空值(如果分数是可空的列)。不过,我不知道MySQL的语法。谢谢你指出Moose先生,我只是假设这个没有NULL
值。无论如何,编辑我的答案:)