0

2 つのテーブルがあり、これら 2 つのテーブルの列を追加したい。TrueResult テーブルの最初の列 (File_Name) が MyResult テーブルの最初の列 (F_Name) と等しい場合、両方のテーブル
TrueResultの 2 番目と 3 番目の列を追加します。

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   

TrueResult
テーブルの最初の行が MyResult テーブルの 3 行目に等しいため、結果を追加する例です。

Pos_Score=2.8+3.25
Neg_Score=3.9 +2.5     

この問題を解決するために、次のコードを書きます。
コード

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

4

3 に答える 3

3

クエリから、すべての文字を使用している*ため、使用していませんCOLUMN ALIAS。次の結果が得られます。

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();

に:

textBox3.Text = r["Pos_Score"].ToString();
textBox2.Text = r["Neg_Score"].ToString();
textBox1.Text = r["P_Score"].ToString();
textBox4.Text = r["N_Score"].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());
于 2013-05-31T08:26:38.160 に答える
2

これはすべて 1 つのクエリで実行できると思います。

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;
于 2013-05-31T08:27:50.643 に答える
0

クエリ自体でそれを行うべきではありませんか? 私には簡単に思えます。次のようなもの:

SELECT File_Name SUM(Pos_Score) SUM(Neg_Score)
FROM TrueResult, MyResult where TrueResult.FileName=MyResult.FileName
GROUP BY TrueResult.File_Name

単なるスケッチであり、完全に正しいわけではありません。これをmysqlの外部で実行したい特別な理由はありますか?

于 2013-05-31T08:31:11.223 に答える