Форум: "Базы";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];
Вниз"Сквозной" поиск Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.036 c