Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.20;
Скачать: CL | DM;

Вниз

"Сквозной" поиск   Найти похожие ветки 

 
Tronado   (2007-11-28 10:22) [0]

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


 
Andrey ©   (2007-11-28 10:25) [1]

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

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


 
Sergey13 ©   (2007-11-28 10:26) [2]

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

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


 
Tronado   (2007-11-28 10:28) [3]

Sergey13 ©   (28.11.07 10:26) [2]

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


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

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

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

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


 
Andrey ©   (2007-11-28 10:36) [5]

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 временная таблица;


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

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


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

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

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


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

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


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

Andrey ©   (28.11.07 10:36) [5]

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


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

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

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


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

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


 
Slym ©   (2007-11-28 10:52) [12]

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 11:31) [13]

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


 
Anatoly Podgoretsky ©   (2007-11-28 12:11) [14]


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

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


 
Andrey ©   (2007-11-28 12:29) [15]

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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2008.04.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.015 c
2-1206586708
Stepper
2008-03-27 05:58
2008.04.20
Вывод данных в RichEdit с предварительным удалением пробела?


8-1178253224
TIF
2007-05-04 08:33
2008.04.20
3D Max и Delphi


6-1185300202
malyar
2007-07-24 22:03
2008.04.20
как получить все строки принятые idtcpclient(ом)


2-1206474840
delphinub
2008-03-25 22:54
2008.04.20
Transaction приводит в исключению


2-1206565281
MSD
2008-03-27 00:01
2008.04.20
вопрос Edit