![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
фильтрация [D6, Paradox]
Andy Eremin © (2003-02-11 10:21:00)Мастера!
В результате проверки в SQL-запросе типа:
WHERE [условие1] or [условие2]
все нормально фильтруется, но происходит дубляж записей, т.е. каждая вторая запись - повторная.
Как их убрать?
Код такой:
Query1.SQL.Add("SELECT Materials.Mat_Name as Name,
Models.Mod_Name as Name2, Number, Cost ");
Query1.SQL.Add("FROM Materials, Models, Main");
Query1.SQL.Add("WHERE (Materials.Mat_Number=Number) OR (Models.Mod_CodeNumber=Number) ORDER BY Number");
Соловьев (2003-02-11 13:18:00) [21]2 Andy Eremin ©
могу выслать текста.
stone (2003-02-11 13:04:00) [22]
> После предложенной Вами фильтрации в итоге ничего не остается,
> т.е. ни одной записи
Во-первых это ни фильтрация, а текст запроса. Давайте уж будем точными в терминологии.
Во-вторых, следует учитывать принцип логического построения данных. Возможно вместо INNER JOIN нужно использовать LEFT OUTER JOIN или RIGHT OUTER JOIN. Все зависит от конкретных условий. Проанализировать Ваши данные телепатически я не в состоянии.
В-третьих, это азы SQL. Не поленитесь и почитайте литературу.
chudaks (2003-02-11 12:39:00) [23]А если так:
select DISTINCT Materials.Mat_Name as Name,Models.Mod_Name as Name2, Number, Cost FROM Materials, Models, Main WHERE (Materials.Mat_Number=Main.Number) OR (Models.Mod_CodeNumber=Main.Number) ORDER BY Number
;-)
Соловьев (2003-02-11 12:37:00) [24]2 Andy Eremin ©
Отестируй свой запрос в SQL Exploere.
Я всегда там тестю, и нахожу то решение которое мне надо.
Andy Eremin (2003-02-11 12:34:00) [25]2 stone
После предложенной Вами фильтрации в итоге ничего не остается, т.е. ни одной записи
Query1.SQL.Add("SELECT Materials.Mat_Name as Name, Models.Mod_Name as Name2, Number, Code, Was_Quantity, Quantity ");
Query1.SQL.Add("FROM Main INNER JOIN Materials ON Materials.Mat_Number=Number ");
Query1.SQL.Add("INNER JOIN Models ON Models.Mod_CodeNumber=Number ORDER BY Number");
stone (2003-02-11 12:17:00) [26]
> "INNER JOIN Models md " - что означает здесь md?
псевдоним таблицы, чтобы не писать везде ее полное имя
Andy Eremin (2003-02-11 12:16:00) [27]Reindeer Moss Eater
Да, но с двумя таблицами (Materials, Main) программа справляется мгновенно, выдавая то, что нужно.
А Models - само по себе маленькая.
Логики нет ждать 5 минут для фильтрации
Reindeer Moss Eater (2003-02-11 12:10:00) [28]Для декартова произведения 3 таблиц 5 минут - это не время.
:)
Andy Eremin (2003-02-11 12:07:00) [29]Сделал так:
Сначала старый запрос, затем DISTINCT.
Все получилось, только время выборки не уменьшилось.
Дело в том, что предыдущий запрос создает записей не N*2, а N*M*K - где N и M и K - число записей таблиц Materials, Models, Main
5 минут для фильтрации - многовато
Соловьев (2003-02-11 12:06:00) [30]Покажи те записи(часть), которые ты считаешь одинаковыми.
Может для тебя они визуально одинаковы? А там на самом деле срусская, а там должна быть английская?
Andy Eremin (2003-02-11 11:53:00) [31]2 Соловьев
Гы-гы. Чего просил, то и написал:
сунул distinct между SELECT и старым запросом.
Ох, аж смешно стало. Вообщем, на большее я не догадался.
Соловьев (2003-02-11 11:37:00) [32]Что написал, т.е. какой запрос?
Andy Eremin (2003-02-11 11:34:00) [33]2 Соловьев
Никаких изменений я не обнаружил 8-((
Anatoly Podgoretsky (2003-02-11 11:34:00) [34]Andy Eremin © (11.02.03 11:19)
В хелпе есть и подробно, также есть в любой книге про SQL
Соловьев (2003-02-11 11:24:00) [35]
SELECT DISTINCT ...
Вместо ...твой запрос без SELECT
Andy Eremin (2003-02-11 11:19:00) [36]2 Соловьев
SELECT DISTINCT
Простите, но я не знаю, как им пользоваться. В хелпе не нашел...
Соловьев (2003-02-11 11:16:00) [37]
SELECT DISTINCT
Andy Eremin (2003-02-11 11:14:00) [38]2 Reindeer Moss Eater
Также выдает дублированные записи...
Reindeer Moss Eater (2003-02-11 11:12:00) [39]Что значит не работает?
Andy Eremin (2003-02-11 11:12:00) [40]2 Reindeer Moss Eater
Не работает 8-(