Один и тот же вывод для двух совершенно разных запросов

Следующие два запроса дают одинаковый результат при выполнении в R studio v_0.96.

1)

ab<-sqldf('select a.Family_tree_id, a.parent_name
           from test as a, test as b 
           where a.child_id <> b.parent_id 
           group by a.Family_tree_id')

2)

cd<-sqldf('select a.Family_tree_id, a.parent_name
           from test as a
           where a.parent_name NOT IN 
           (select b.child_name from test as b)')

Кажется, я не понимаю причину одного и того же ответа, хотя кажется, что первый выполняет совершенно другую работу, чем второй. Я не очень разбираюсь в SQL, поэтому, пожалуйста, потерпите меня. Требуется ли дополнительная информация о наборе данных, чтобы ответить на этот вопрос?


person Bilal arif    schedule 30.05.2012    source источник
comment
Пожалуйста, сделайте этот пример воспроизводимым, предоставив (образец) свои данные.   -  person Paul Hiemstra    schedule 30.05.2012


Ответы (1)


Хотя, как просил Пол, набор данных пригодится, между двумя запросами есть несколько совпадений:

  • Оба запроса выбирают людей без детей.
  • DISTINCT - это своего рода простая GROUP BY для предотвращения дубликатов, ваш первый запрос будет иметь тот же результат, если для каждого идентификатора генеалогического дерева есть только один бездетный родитель.

Кроме того, во втором запросе , test as b не имеет смысла.

person Vincent Vancalbergh    schedule 30.05.2012
comment
Я знал, что это было вашим намерением, но вы уже переопределили b внутри (select b.child_name from test as b). Таким образом, , test as b выше не требуется. - person Vincent Vancalbergh; 30.05.2012
comment
Моя ошибка - не могу считать запросы! - person Jonathan Leffler; 30.05.2012
comment
извините .. забыл удалить тест как b во втором запросе .. теперь я вижу, что это бесполезно .. я предоставляю свой образец набора данных - person Bilal arif; 30.05.2012
comment
Все в порядке, я ожидал ошибки, что b уже определено (возможно). Это не SQL Server, поэтому я не уверен. - person Vincent Vancalbergh; 30.05.2012
comment
Family_tree_id child_id child_name parent_id parent_name 1 15764 Sherman_Miles 6574 Jason_Miles 1 6574 Jason_Miles 89657 Michael_Miles 1 89657 Michael_Miles 65428 William_Miles 2 98754 Robert_Jackson 35468 Michael_Jackson 2 35468 Michael_Jackson 65789 Jeremy_Jackson 2 65789 Jeremy_Jackson 3854 Randy_Jackson 2 3854 Randy_Jackson 69875 Marlon_Jackson 2 69875 Marlon_Jackson 325 Thomas_Jackson - person Bilal arif; 30.05.2012
comment
каждый кортеж имеет 5 атрибутов ... он плохо отформатирован ... я публикую здесь свой первый вопрос, поэтому не очень разбираюсь в форматировании здесь ... как я могу опубликовать здесь таблицу? - person Bilal arif; 30.05.2012
comment
@Bilalarif: Вы можете (и должны) добавить пример к своему вопросу. Но я только что проверил ваши два запроса на ваших примерах данных, и результаты были разными. - person Andriy M; 30.05.2012
comment
@Bilalarif: Ваш запрос №1 и ваш запрос №2. - person Andriy M; 30.05.2012
comment
@AndriyM странно. Я все еще получаю тот же результат, т.е. 1 William_miles 2 Thomas_Jackson для обоих запросов. Хотя я выполнил эквивалент обоих запросов в SAS 9.0 как proc sql и получил разные результаты. Интересно, почему только в R он дает этот странный ответ. - person Bilal arif; 30.05.2012
comment
@Bilalarif: По сути, ваш первый запрос не имеет особого смысла. Вы должны попробовать это без GROUP BY, чтобы понять, что я имею в виду. - person Andriy M; 30.05.2012