【问题标题】:How do I populate .net datasets from multiple tables using vb.net from oracle 11g如何使用 oracle 11g 中的 vb.net 从多个表中填充 .net 数据集
【发布时间】:2013-12-26 16:08:17
【问题描述】:

我有一个 Oracle 11g 数据库,其中包含 13 个左右的表和不同数量的列。

我知道如何一次从一个表中检索信息,但我需要从多个表中检索不同数量的列并填充数据集。

我是 SQL 和数据库编程的新手,非常感谢您提供详细的答复。

每个表都包含一个时间列。

例如:

select col2, col4, col5,col10 
from table1 
where TimeCol >= IntialTime and TimeCol <= FinalTime 
order by TimeCol desc;

我正在寻找的是一个单一的查询,它将检索具有上述格式的多个表。

只是为了澄清我在寻找什么。 假设我有 5 张桌子。 Tbl1、Tbl2、Tbl3、Tbl4、Tbl5

每个包含一个时间列,并说 10 个附加列。 Tbl1 包含;时间、ColA、ColB、ColC...ColJ Tbl2 包含;时间、ColK、ColL、ColM...ColT Tbl3 包含;时间、ColU、ColV、ColW...ColAD 表4 ... Tbl5 ...

如何编写一个 select 语句,它将根据时间范围检索 Tbl1 Time、ColA、ColC、ColD 以及 Tbl2 ColL、ColM、ColN、ColP 以及 Tbl3 ColU、ColW、ColAA、ColAC 等。

【问题讨论】:

    标签: sql vb.net oracle11g


    【解决方案1】:

    您可以只嵌套查询...

    SELECT cols FROM table....
    SELECT cols FROM table2....
    SELECT cols FROM table3....
    

    DataSet 将保存DataTables 的集合,因此Datatable[0] 将保存第一个查询等。

    DataSet ds = new DataSet();
    //populate dataset...
    DataTable firstQuery = ds.Tables[0];
    
    OracleCommand oraCommand = new OracleCommand("SELECT cols FROM table....; 
                                         SELECT cols FROM table2....", dbconnection);
    

    【讨论】:

    • 刚接触 SQL,如何嵌套查询?
    • 这是内联 SQL 还是您使用的是存储过程?
    • 内联。在这个时候,使用存储过程有点过头了。
    • 你只需要SELECT * FROM...; SELECT * FROM...;
    • 我是否只需将每个 select 语句添加到 OracleCommand.Parameters.Add 方法中?然后创建一个OracleDataAdapter、DataSet并使用fill方法填充Dataset?
    【解决方案2】:

    使用Oracle SQL Developer,您可以轻松地测试您的语句。这是一个很棒的工具。 Oracle doc 提供您需要的一切。 Oracle samples 可以成为您的开始。

    你的问题有点不清楚。 如果你想创建一个view,那么 Oracle 会另外提供文档。 hth 为你的开始

    【讨论】:

    • 我正在寻找的是一个单一的查询,它将允许我根据时间列从 2 个或多个表中检索多个(不是全部,并且每次都不相同)列。谢谢您的答复。顺便说一句,我一直在使用 SQL Developer 查看我的表并执行单个查询。到目前为止,我一直在执行单个查询,然后将其保存到 CSV 文件,然后将所有结果与 Excel 合并。
    • @user3083002 aha .. 也许您可以选择使用您的编程语言(在您的情况下为 vb.net)来构建取决于给定日期的 sql 查询(“.. . 基于时间范围")。
    【解决方案3】:

    Join 会解决这个问题。我希望..

    SELECT  col2, col4, col5,col10 
    FROM table1 
    INNER JOIN table2 on table2.time column= table1.time column
    WHERE TimeCol >= IntialTime and TimeCol <= FinalTime 
    

    【讨论】:

    • 所以,上面将加入 Table1 和 2 并且行将同步。是否也需要表 2 中的 col2,4,5,10?要获得 3 个或更多表,我是否只需添加额外的“内部联接”?如果我需要每个表中的不同列怎么办?
    • 我试图运行你的脚本,用我拥有的替换列和表名。我收到以下错误:SQL 错误:ORA-00918:列不明确定义 00918。00000 -“列不明确定义”
    • 要在选择中获取更多表,只需添加Select table1.colname,table2.colname fROM table1,table2 wHERE TABLE1.COLNAME=table2.colname
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 2011-06-07
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    相关资源
    最近更新 更多