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

时间:2010-07-11 01:17:18

标签: .net sql oracle oracle10g

我使用的是Oracle 10g Express Edition 10.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");
        }
    }
}

将没有“获得记录”(而Oracle SQL Developer为同一查询显示数千条记录)。

奇怪的是,如果我从Oracle SQL Developer 2.1运行相同的三个查询,那么所有查询都会返回结果。

发生了什么事?


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

所以我的问题会有所不同:鉴于Oracle语法,三个“错误”查询的正确行为是什么?要显示所有内容还是显示空集?我仍然想知道为什么Oracle SQL Developer和我的应用程序没有显示相同的结果。

2 个答案:

答案 0 :(得分:1)

您确定在/可以作为可以访问表的架构运行吗?也许在SQL Developer中,您作为一个用户运行,当从其他地方运行时,您正在以另一个用户身份运行。我会检查公共同义词和表格上的权限,以及找出你要连接的用户。

答案 1 :(得分:0)

鉴于你的编辑,三个错误的查询都在进行内连接(第一个是非常错误,因为它正在做笛卡尔积),因此如果Table2为空,则不应该返回任何内容。

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