|
|
|
Forum 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 – это вроде не то.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 14.02.2007 20:06
Сообщ.: 565,
Visits: 6 243
|
|
| Наверное это поле у тебя не дает уникальности записи. Попробуй по еще одному полю связать. Или нужен какой-то дополнительный критерий для убития скалярного произведения таблиц :(.
|
|
|
|
|
новичок
      
участник
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 и т.д.
Чтобы говорить конкретно, нужно посмотреть на твой запрос.
|
|
|
|
|
Forum Member
      
участник
Last Login: 11.07.2000 3:48
Сообщ.: 40,
Visits: 441
|
|
| Я разобрался уже... Вот только эта связь довольно сложной получилась, из-за этого запрос несколько тормозит...
|
|
|
|
|
новичок
      
участник
Last Login: 30.10.2000 3:47
Сообщ.: 2,
Visits: 23
|
|
Если тормозит значительно, то опять же, в
зависимости от ситуации, нужно либо делать
редезайн модели, либо добавлять индексы, либо и то и другое.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 14.02.2007 20:06
Сообщ.: 565,
Visits: 6 243
|
|
| Я думаю нужно несколько табличек с ключевыми полями, а там использовалась одно с массой информации
|
|
|
|
|
Supreme 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....
|
|
|
|
|
Supreme 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!
|
|
|
|