【问题标题】:Fetch data from a database from two different tables从两个不同的表中从数据库中获取数据
【发布时间】:2012-04-11 22:22:35
【问题描述】:

我正在使用 C#(asp.net)。我在同一个数据库中有两个表(数据和详细信息)。

表“数据”

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

表格“详细信息”

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

现在我想从 code="efg" 的 "num" 中获取一个值(在表 "details" 中)。并使用相同的值 (3) 通过 id 从表“data”中获取数据。我正在使用此代码。

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

但它显示错误。它显示“行/列不存在数据。”

【问题讨论】:

    标签: c# asp.net sql sql-server-2008


    【解决方案1】:

    你可以使用

    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,请使用 SqlConnection 代替 OleDbConnection
    更多:不要格式化您的查询加入字符串、数字、日期等;使用SqlParameter,这样你就不用担心类型和格式了!!

    【讨论】:

    • 实际上我正在使用 Microsoft 访问数据库,这就是我使用“OleDbConnection”的原因。对不起,我错误地标记了 sql server。
    • @Viktor:我的回答解决了你的问题吗?如果是这样,您应该accept it,如果您认为没问题。
    【解决方案2】:

    或者你可以使用子查询

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

    【讨论】:

    • 在执行方面,由于查询优化器,此查询与您在答案中提供的两个查询完全相同。不相关是这里的关键词。事实上,我们已经提供了三种不同的方式让 SQL 执行完全相同的任务(执行计划可以证实这一点)。 Downvoter 可能不知道优化器是如何工作的。
    • alex,我想告诉你的不是查询本身是错误的,也不是查询优化器没有在我的同一个查询中翻译它;我相信你明白像 OP 这样的新手必须以更简单和默认的方式来编写查询,因为他无法理解执行计划是什么或查询优化器是如何工作的 :) 你同意我的观点吗?
    猜你喜欢
    • 2019-08-06
    • 2015-12-21
    • 2014-07-11
    • 2019-05-27
    • 2022-12-13
    • 2012-01-15
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    相关资源
    最近更新 更多