2012-04-11 20 views
0

私はC#(asp.net)を使用しています。私は同じデータベースに2つのテーブル(データと詳細)を持っています。2つの異なるテーブルからデータベースからデータを取得します

表 "データ"

id | chap | unit | 
    ---------------- 
    1| chap1|unit1 | 
    2| chap2|unit2 | 
    3| chap3|unit3 | 

表 "詳細"

id| code| num | 
---------------- 
1|abc |2 | 
2|efg |3 | 
3|hij |1 | 

は、今は "NUM" ここで、コード= "EFG"(表中の "詳細")から値を取得したいです。同じ値(3)を使用して、テーブル "data"のデータをIDでフェッチします。私はこのコードを使用しています。

OleDbConnection conn = new OleDbConnection(*** ...... *****); 
     OleDbCommand cmd; 
     OleDbDataReader reader; 
     String query = String.Format("select num from details where code="efg"); 
     cmd = new OleDbCommand(query, conn); 
     reader = cmd.ExecuteReader(); 
     int num = int.Parse(reader.GetValue(0).ToString()); 

     query = String.Format("select chap from data where id={0}",num); 
     cmd = new OleDbCommand("select lesson from data where id=3", conn); 
     reader = cmd.ExecuteReader(); 


     Label1.Text = reader.GetValue(0).ToString(); 

ただし、エラーが表示されます。 「行/列にデータが存在しません」と表示されます。

答えて

2

あなたは

SELECT d.chap, d.unit 
FROM data d INNER JOIN details de 
    ON d.id = de.num 
WHERE de.code = 'efg' 

または

SELECT d.chap, d.unit 
FROM data d INNER JOIN details de 
    ON d.id = de.num 
    AND de.code = 'efg' 

詳細を使用することができます:あなたはSQL-Serverを使用している場合、OleDbConnectionの代わりにSqlConnectionを使用しています。
その他:文字列、数字、日付などを結合してクエリをフォーマットしないでください。 SqlParameterを使用して、タイプやフォーマットについて心配する必要はありません!私は「OleDbConnectionオブジェクト」を使用していますなぜ

+0

を使用することができ、それはです。申し訳ありませんが、誤ってSQL Serverにタグを付けます。 – Sagar

+0

@Viktor:私の答えはあなたの問題を解決しましたか?そうだとすれば、それを受け入れるべきです(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – Marco

-1

それとも、実際に私はデータベースにMicrosoftのアクセスを使用してmのサブクエリ

SELECT * FROM data INNER JOIN 
    (SELECT num FROM details WHERE code='efg') det 
ON data.id = det.num 
+0

これは非常に悪いことです。私はこれをdownvoteしませんでした...しかし、それは悪いです... – Marco

+0

このクエリは、クエリオプティマイザのために、実行には、あなたの答えで提供した2つの場合とまったく同じです。無相関はキーワードです。実際、SQLにまったく同じタスクを実行させる3つの異なる方法が用意されています(実行計画でこれを確認できます)。 Downvoterは、おそらくオプティマイザの仕組みについての手がかりを持っていません。 – Alex

+0

alex、私があなたに見せたいのは、そのクエリー自体が間違っているのではなく、クエリーのオプトマイザーが同じクエリーでそれを翻訳しないということではありません。 OPのような初心者は、実行計画が何であるか、またはクエリオプティマイザがどのように動作するのかを理解できないため、クエリを書くための簡単でわかりやすい方法で表示する必要があることを理解しているはずです。 – Marco

関連する問題