Вопрос по Select’у
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Вопрос по Select’у Expand / Collapse
Автор
Сообщение
25.10.2000 12:19
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 11.07.2000 3:48
Сообщ.: 40, Visits: 441
Имеются две таблицы, условно Table1 и Table2. Делается выборка (Select) по полю Field1 первой таблицы и Field2 второй:

Select Table1.Field1, Table2.Field2 from Table1, Table2 where … некое условие.

Проблема – в двух таблицах неравное количество записей, и в итоге в этом select’е число записей перемножается. Например, было 106 и 144 соответственно, стало 12262 кажись.

Как избежать этого перемножения? Нужно составить запрос, который имел бы такую структуру, но без этого перемножения. Distinct, Distinctrow – это вроде не то.
Сообщ. #271415
26.10.2000 3:41
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 14.02.2007 20:06
Сообщ.: 565, Visits: 6 243
Наверное это поле у тебя не дает уникальности записи. Попробуй по еще одному полю связать. Или нужен какой-то дополнительный критерий для убития скалярного произведения таблиц :(.
Сообщ. #321823
30.10.2000 3:55
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 30.10.2000 3:47
Сообщ.: 2, Visits: 23
Это называется декартово произведение
и означает, что в условии (Where)
таблицы Table1 и Table2 не связаны между собой
(или связаны неправильно). Должно быть задано
что-то вроде: Table1.Field3 = Table2.Field4 или
Table1.Field3 between Table2.Field4 and Table2.Field5 и т.д.

Чтобы говорить конкретно, нужно посмотреть на твой запрос.
Сообщ. #374500
30.10.2000 6:29
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 11.07.2000 3:48
Сообщ.: 40, Visits: 441
Я разобрался уже... Вот только эта связь довольно сложной получилась, из-за этого запрос несколько тормозит...
Сообщ. #374502
30.10.2000 6:38
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 30.10.2000 3:47
Сообщ.: 2, Visits: 23
Если тормозит значительно, то опять же, в
зависимости от ситуации, нужно либо делать
редезайн модели, либо добавлять индексы, либо и то и другое.
Сообщ. #374503
30.10.2000 8:12
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 14.02.2007 20:06
Сообщ.: 565, Visits: 6 243
Я думаю нужно несколько табличек с ключевыми полями, а там использовалась одно с массой информации
Сообщ. #435858
09.11.2000 21:03
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.07.2006 12:23
Сообщ.: 378, Visits: 4 161
Mate,

may be you need to think about your database structure... Normalizations and all that things....
Сообщ. #615221
17.11.2000 22:15


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 27.03.2008 15:26
Сообщ.: 701, Visits: 7 028
Построение запроса по, предложенной автором
вопроса, схеме приводит к перемножению из-за
того, что нет однозначного соответствия
записей одной таблицы с записями другой.
Поясню на примере.

Даны:

Таблица:
Table1
Поля:
Key,
Field1

Таблица:
Table2
Поля:
Key,
Field2

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

SELECT
Table1.Field1 , Table2.Field2
FROM
Table1, Table2
WHERE
Table1.Key = Table2.Key

Или (что гораздо правильней):

SELECT
Table1.Field1 , Table2.Field2
FROM
Table1 INNER JOIN Table2
ON Table1.Key = Table2.Key

С Уважением , Silver!

Сообщ. #615315
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl