私はOracle 10g Express Edition 10.2を使用しており、Oracle.DataAccess 2.111アセンブリでC#アプリケーションから使用しています。
1つのテーブルからデータを選択できますが、複数のテーブルからデータを選択しようとすると、そのセットは空です。
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
3人とも結果が得られません。このように使用すると:
using (OracleCommand getData = new OracleCommand("select * from Table1, Table2", oracleConnection))
{
using (OracleDataReader reader = getData.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine("Got record");
}
}
}
「Gotレコード」はありません(Oracle SQL Developerは同じ問合せに対して数千のレコードを表示します)。
奇妙なのは、Oracle SQL Developer 2.1から同じ3つのクエリを実行すると、すべて結果が返されるということです。
何が起こっていますか?
編集: 私は本当に愚かなので、Table2に何かがあるかどうか確認するのを忘れました。実際、Table2は現在空です。 select * from Table1 left join Table2 on Table2.Id = Table1.Id
すべてがうまくいっている。
だから私の質問は少し異なります: オラクルの構文では、3つのバグのあるクエリの正しい動作は何ですか?すべてを表示するか空のセットを表示するには?そして、私は、Oracle SQL Developerとアプリケーションが同じ結果を表示していないのはまだ不思議です。
回答:
回答№1は1スキーマとして実行中であることは確かですか?それはテーブルにアクセスできますか?おそらくSQL Developerでは、あなたは1人のユーザーとして実行しており、別の場所から実行している場合は別のユーザーとして実行しています。私は公共の同義語とテーブルの特権をチェックするだけでなく、あなたがどのユーザとして接続しているかを調べるでしょう。
回答№2の場合は0
あなたの編集を考えると、3つのバグのあるクエリはすべて内部結合をしています(最初のものはデカルト積があるので実際にはバグです)。 Table2
空です。
あなたはそれらが変更された例だけでなく、使用している正確なクエリであると確信していますか?