Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

"Сквозной" поиск [D7, Access]


Tronado ©   (2007-11-28 10:22:00) 

Народ подскажите плиз как можно организовать сквозной поиск, т.е. имеем порядка 10 таблиц Access, в какой-то из таблиц лежат нужные данные. Как "просмотреть" поиском все таблицы? Данные удовлетворяющие запросу могут быть в нескольеих таблицах. Такое впринципе возможно?


Anatoly Podgoretsky   (2007-11-28 16:18:00) [1]

> Andrey  (28.11.2007 12:29:15)  [15]

Да нечего жалеть, SELECT + UNION самое то для задачи, а оптимальность здесь не возможна по определению.


Andrey   (2007-11-28 12:29:00) [2]

>Anatoly Podgoretsky ©   (28.11.07 12:11) [14]
>остальные не отвечают условиям задачи.
Правда? Жаль.


Anatoly Podgoretsky   (2007-11-28 12:11:00) [3]


> Муть какую то написал наверно :)

Одназначно.
Нормальные решения у Slym, остальные не отвечают условиям задачи.


Andrey   (2007-11-28 11:31:00) [4]

>Slym ©   (28.11.07 10:52) [12]
С точки зрения производительности, ИМХО, лучше первый вариант. Т.к. далеко не все оптимизаторы смогут раскурить такую связку и использовать условие для элементов подзапроса.


Slym   (2007-11-28 10:52:00) [5]

SELECT Name1 as FldName
FROM Brands
WHERE Name1 LIKE '%значение%'
UNION
SELECT Name2 as FldName
FROM  Categories
WHERE Name2 LIKE '%значение%'

или
SELECT FldName
FROM
 (SELECT Name1 as FldName
 FROM Brands
 UNION
 SELECT Name2 as FldName
 FROM  Categories)
WHERE FldName LIKE '%значение%'


Andrey   (2007-11-28 10:44:00) [6]

>Tronado   (28.11.07 10:41) [9]
Можно, у Slym ©   (28.11.07 10:37) [6] написано как. Тока там типы полей из пердложения select должны совпадать во всех элементах union-а. Да и монстроидальный может запрос получиться (если таблиц для поиска больше 10 скажем)... но для аксеса простительно )


Tronado   (2007-11-28 10:41:00) [7]

Andrey ©   (28.11.07 10:36) [5]

А без временных таблиц можно обойтись?


Труп Васи Доброго(заб. пароль)   (2007-11-28 10:41:00) [8]

Нормализуй данные и отпадёт надобность в таких действиях. Если лень нормализовать , то вариант
> Andrey ©   (28.11.07 10:36) [5]

вполне подойдёт.
Но лучше нормализуй.


Tronado   (2007-11-28 10:40:00) [9]

А если так: SELECT Таблица1.FIO FROM Таблица1, Таблица2, Таблица3 WHERE WHERE Таблица1.FIO=Таблица2.FIO AND Таблица1.FIO==Таблица3.FIO

Муть какую то написал наверно :)


Tronado   (2007-11-28 10:40:00) [10]

WHERE одно конечно :)


Slym   (2007-11-28 10:37:00) [11]

SELECT Brands.Name as FldName
FROM Brands
UNION
SELECT Categories.Name as FldName
FROM  Categories


Andrey   (2007-11-28 10:36:00) [12]

delete from временная таблица;
insert into временная таблица (поле)
select поле from таблица1 where поле like '%значение%';
insert into временная таблица (поле)
select поле from таблица2 where поле like '%значение%';
...
insert into временная таблица (поле)
select поле from таблицаN where поле like '%значение%';

select поле from временная таблица;


Tronado   (2007-11-28 10:34:00) [13]

Грубо говоря нужно следующее:

Допустим к примеру есть 3 таблицы, ищем по полю FIO (фамиля имя отчество). В первой таблице есть Иванов Андрей Михалович, во второй Иванченко Галина Сергеевна, в третьей Ивченков Валентин Геннадьевич

В строке запроса пишу "Ив" и в итоге мне надо получить результирующий набор данных из всех трех таблиц с вышеперечисленными ФИО. Остальные записи считаем что не удовлетворяют условию.


Tronado   (2007-11-28 10:28:00) [14]

Sergey13 ©   (28.11.07 10:26) [2]

Да не во всех. По отдельности поиск не представляет трудности, т.е. если искать в каждой таблице. Как потом вывести результат и отобразить в гриде?


Sergey13   (2007-11-28 10:26:00) [15]

> [0] Tronado   (28.11.07 10:22)
> Данные удовлетворяющие запросу могут быть в нескольеих таблицах.

Ну так и ищи в этих таблицах. К тому же наверное данные надо искать в определенных полях, а не во всех?


Andrey   (2007-11-28 10:25:00) [16]

Ага.
select поле from таблица1 where поле like '%значение%'
select поле from таблица2 where поле like '%значение%'
...
select поле from таблицаN where поле like '%значение%'

Больше денормализации - больше запросов )


Наверх

Титульная страница Поиск, карта сайта Написать письмо