代码之家  ›  专栏  ›  技术社区  ›  Arseni Mourzenko

为什么我不能从Oracle中的多个表中选择?

  •  1
  • Arseni Mourzenko  · 技术社区  · 14 年前

    我使用的是Oracle10gExpressEdition10.2,它来自一个C应用程序和Oracle.dataaccess 2.111程序集。

    我可以从一个表中选择数据,但是如果我尝试从多个表中选择数据,则集合为空。

    select * from Table1
    

    很好,但是:

    select * from Table1, Table2
    select * from Table1, Table2 where Table1.Id = Table2.Id
    select * from Table1 inner join Table2 on Table1.Id = Table2.Id
    

    三个都不会有结果吗?当这样使用时:

    using (OracleCommand getData = new OracleCommand("select * from Table1, Table2", oracleConnection))
    {
        using (OracleDataReader reader = getData.ExecuteReader())
        {
            while (reader.Read())
            {
                Console.WriteLine("Got record");
            }
        }
    }
    

    不会有“got record”(而OracleSqlDeveloper会为同一查询显示数千条记录)。

    奇怪的是,如果我从OracleSQLDeveloper2.1运行相同的三个查询,所有查询都会返回结果。

    发生什么事了?


    编辑: 我真的很蠢,我忘了检查表2中是否有东西。实际上,表2当前为空。做 select * from Table1 left join Table2 on Table2.Id = Table1.Id 一切都很好。

    所以我的问题会有点不同:考虑到Oracle语法,三个“错误”查询的正确行为是什么?显示所有内容还是显示空集?我仍然在想,为什么OracleSQL开发人员和我的应用程序没有显示相同的结果。

    2 回复  |  直到 14 年前
        1
  •  1
  •   MJB    14 年前

    您确定您正在/作为可以访问表的架构运行吗?也许在SQL开发人员中,您以一个用户的身份运行,而从其他地方运行时,您以另一个用户的身份运行。我将检查表上的公共同义词和特权,并找出您作为什么用户进行连接。

        2
  •  0
  •   Donnie    14 年前

    考虑到您的编辑,这三个错误的查询都在进行内部连接(第一个查询实际上是错误的,因为它正在进行笛卡尔积),因此不应该返回任何 Table2 是空的。

    您确定这些是您正在使用的确切查询,而不仅仅是修改过的示例。