![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
"Сквозной" поиск [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 '%значение%'
Больше денормализации - больше запросов )