2010-07-11 79 views
1

我正在使用Oracle 10g Express Edition 10.2,並使用它從一個C#應用程序與Oracle.DataAccess 2.111程序集。爲什麼我不能從Oracle中的多個表中選擇?

我可以從一個表中選擇數據,但是如果我嘗試從多個表中選擇數據,則該集合爲空。

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

你能發表一些代碼嗎?你如何閱讀三個結果集? – 2010-07-11 01:23:41

回答

1

您確定您正在/作爲可訪問表的模式運行嗎?也許在SQL Developer中,你是以一個用戶的身份運行的,並且在其他地方運行時,你正在運行另一個用戶。我會查看桌面上的公共同義詞和特權,以及找出您連接的用戶。

+0

找到。我忘了將更改提交給SQL Developer中的Table2,所以對於Table2實際上有一些數據,而對於C#應用程序,表是空的。感謝您指引我的好方向。 – 2010-07-11 01:45:22

0

鑑於您的編輯,三個越野車查詢都在進行內部連接(第一個是真正的越野車,因爲它正在做笛卡爾產品),因此如果Table2爲空,則不應返回任何內容。

您確定這些是您正在使用的確切查詢,而不僅僅是修改後的示例。

相關問題