Почему я не могу выбрать из более чем одной таблицы в Oracle? - PullRequest
1 голос
/ 11 июля 2010

Я использую 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.На самом деле таблица 2 в настоящее время пуста.Выполнение select * from Table1 left join Table2 on Table2.Id = Table1.Id показывает все хорошо.

Так что мой вопрос будет немного другим: с учетом синтаксиса Oracle, каково правильное поведение трех «ошибочных» запросов?Для отображения всего или для отображения пустого набора?И мне все еще интересно, почему Oracle SQL Developer и мое приложение не показывают одинаковый результат.

Ответы [ 2 ]

1 голос
/ 11 июля 2010

Вы уверены, что используете / как схему, которая имеет доступ к таблицам?Возможно, в SQL Developer вы работаете как один пользователь, а когда вы работаете из другого места, вы работаете как другой.Я хотел бы проверить общедоступные синонимы и привилегии в таблице, а также выяснить, к какому пользователю вы подключаетесь.

0 голосов
/ 11 июля 2010

Учитывая ваше редактирование, все три ошибочных запроса все делают внутренние объединения (первый действительно ошибочный, так как он выполняет декартово произведение), и поэтому не должен ничего возвращать, если Table2 пусто.

Вы уверены, что это именно те запросы, которые вы используете, а не просто измененные примеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...