我使用的是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和我的应用程序没有显示相同的结果。
答案 0 :(得分:1)
您确定在/可以作为可以访问表的架构运行吗?也许在SQL Developer中,您作为一个用户运行,当从其他地方运行时,您正在以另一个用户身份运行。我会检查公共同义词和表格上的权限,以及找出你要连接的用户。
答案 1 :(得分:0)
鉴于你的编辑,三个错误的查询都在进行内连接(第一个是非常错误,因为它正在做笛卡尔积),因此如果Table2
为空,则不应该返回任何内容。
您确定这些是您正在使用的确切查询,而不仅仅是修改过的示例。