PDA

Показать полную графическую версию : разные результаты SQL выборки


Vlad Drakula
13-02-2007, 13:31
есть два запроса:

select r1.id from rt_relation_record as r1, rt_relation_record as r2
where r1.id > r2.id and r1.master_rt_record_id = r2.master_rt_record_id and r1.slave_rt_record_id = r2.slave_rt_record_id

возврящает порядка 530 записей

select id from rt_relation_record where id in (
select r1.id from bnt_rt_relation_record as r1, bnt_rt_relation_record as r2
where r1.id > r2.id and r1.master_rt_record_id = r2.master_rt_record_id and r1.slave_rt_record_id = r2.slave_rt_record_id
)

возвращает порядка 140 записей

куда делись все остальные записи???

dmitryst
13-02-2007, 13:49
Vlad Drakula А какой из результатов правильный? И вообще, что за БД?

Vlad Drakula
13-02-2007, 14:27
dmitryst
база MySQL 4.1.16
а о правильности ответа ничего сказать не могу т.к. по идее должны эти оба запросы выдавать одно и тоже....

dmitryst
13-02-2007, 14:48
Vlad Drakula Меня смущает структура "...as...as". ИМХО, второ вариант правильнее. Сейчас гуру подойдут, побьют :)

Vlad Drakula
13-02-2007, 15:17
dmitryst
ИМХО, второ вариант правильнее.
как второй вариант может быть правиьлнее если он включает результаты выборки первым вариантом?

Меня смущает структура "...as...as".
вроде бы стандартная практика для того чтобы в одном запросе работать снесколькими эгземплярами одной таблицы.

vadimiron
14-02-2007, 01:56
Vlad Drakula

А что это такое?
bnt_rt_relation_record
Просто ошибка или другая таблица?

Таблица же завётся:
rt_relation_record

dmitryst
14-02-2007, 10:54
Vlad Drakula Я имел в виду не синтаксические ошибки, а логические (т.е. написано правильно, но работает не так, как надо). Я обычно для теста создаю маленькие тест-таблицы и пошагово отлаживаю выборку (с контролем того, что выдает каждая)

Abell2000
18-02-2007, 08:43
Я так думаю что
select distinct r1.id from rt_relation_record as r1, rt_relation_record as r2
where r1.id > r2.id and r1.master_rt_record_id = r2.master_rt_record_id and r1.slave_rt_record_id = r2.slave_rt_record_id
вернет как раз порядка 140 записей

Igor_I
18-02-2007, 11:39
А что говорит EXPLAIN?
Вообще-то таблицы действительно разные.




© OSzone.net 2001-2012