Форум: "Начинающим";
Текущий архив: 2018.01.14;
Скачать: [xml.tar.bz2];
ВнизМожно ли сделать запрос SQL из данных фиктивной таблицы? Найти похожие ветки
← →
gedevan (2016-01-29 08:45) [0]Есть таблицы из которых я получаю данные, и есть список полей по которым я хотел бы эту выборку ограничить. Ограничение должно выполняться по 2м полям. Список этот может быть оооочень длинным. И когда я попытался добавить все это условие в раздел where, то Access ругнулся на то что запрос слишком сложный. Тогда я решил сделать из этого списка таблицу и сделать запрос по обеим таблицам с условием равенства значений в колонках (или joinуть таблицы, и выкинуть строки в которых NULL получилось). Но делать ради этого реальную таблицу и сохранять ее в бд мне совсем не хочется. Можно ли обойтись без этого?
Вот что изобрел я, но он ругается на то, что в качестве входных данных должна быть таблица или запрос, а где взять эту таблицу для моего фиктивного подзапроса я не знать, можно ли так вообще делать?."Select
""Tem"",ShotNumber,Name,ItemName,NumberOfSearch,tempfound,itIsTemplate, anotherTime, SearchFixed, x1,x2,y1,y2,ksov,searchtime,FourSearch,NULL,errorCode
FROM
Templates,
( SELECT ""Overview"" as Name1,"""" as ItemName1 UNION SELECT ""Overview"" as Name1,""TL"" as ItemName1 ) as distTab
where ShotNumber = :prm0 and (Templates.Name = distTab.Name1)
//далее прочие запросы, в них нет попытки фильтра
UNION Select ""Col"",ShotNumber, Name,""no items"",0,tempfound,""false"",""false"",""false"",x1,x2,y1,y2,0,searchtime,""fal se"",NULL,errorCode FROM ColorSearch where ShotNumber = :prm2 UNION Select ""Dyn"",ShotNumber, Name,""no items"",NumberOfSegment,tempfound,""false"",""false"",""false"",x1,x2,y1,y2,0,se archtime,""false"",NULL,errorCode FROM DynObj where ShotNumber = :prm1 UNION Select ""Tex"",ShotNumber, Name,""no items"",NumberOfSegment,tempfound,""false"",""false"",""false"",x1,x2,y1,y2,0,se archtime,""false"",RecognizedText,errorCode FROM TextRecognize where ShotNumber = :prm3;"
← →
gedevan (2016-01-29 10:21) [1]
CREATE TABLE distTab (Name1 char(50), ItemName1 char(50));
insert into distTab VALUES (""Undocking"", """" ),(""Undocking"", ""DefaultItem"" );
Select ""Tem"",ShotNumber,Name,ItemName,NumberOfSearch,tempfound,itIsTemplate, anotherTime, SearchFixed, x1,x2,y1,y2,ksov,searchtime,FourSearch,NULL,errorCode FROM Templates where ShotNumber = :prm0 and (Templates.Name = distTab.Name1) and (Templates.ItemName = distTab.ItemName1);
ничего не могу понять ( говорит синтаксическая ошибка в выражении CREATE TABLE, какая?!!! я ничего не вижу (
← →
кгшзх © (2016-01-29 10:34) [2]select "value" as field1,
666 as field2
← →
sniknik © (2016-01-29 11:01) [3]аксесс не умеет выполнять пакеты, только команды.
← →
gedevan (2016-01-29 11:44) [4]хм...более того он создает в базе таблицу....т.е. без этого никак? придется в любом случае создавать?
← →
gedevan (2016-01-29 11:45) [5]
> select "value" as field1,
> 666 as field2
я не понял мысль.
← →
кгшзх © (2016-01-29 11:54) [6]Можно ли сделать запрос SQL из данных фиктивной таблицы
можно
select "value" as field1, 666 as field2
запрос есть, таблицы нет.
← →
sniknik © (2016-01-29 11:58) [7]> запрос есть, таблицы нет.
а вот так уже не получится
select "value" as field1, 666 as field2
union
select "value" as field1, 666 as field2
а он похоже на этой "сверхидее" логику строит... лучше бы стандарты сначала освоил. и логику обычную.
← →
gedevan (2016-01-29 12:06) [8]
> запрос есть, таблицы нет.
но именно это я и пробовал делать в 1м посте, но он требует указать таблицу.
Поэтому я перешел таки к варианту создания таблицы (
← →
кгшзх © (2016-01-29 12:44) [9]но именно это я и пробовал делать
пробовал именно это, а накалякал не это
← →
кгшзх © (2016-01-29 13:10) [10]....
Templates,
( SELECT ""Overview"" as Name1,null as ItemName1
UNION
SELECT ""Overview"" as Name1,""TL"" as ItemName1
) FICTIONTABLE
where
templates.something = FICTIONTABLE.name1
← →
gedevan (2016-01-29 16:23) [11]но я все равно не вижу, чем то что я накалякал отличается от этого (
Select ""Tem"",ShotNumber, Name, ItemName,NumberOfSearch, tempfound, itIsTemplate, anotherTime, SearchFixed, x1,x2,y1,y2,ksov,searchtime,FourSearch, NULL, errorCode
FROM Templates,(SELECT ""Overview"" as Name1,NULL as ItemName1 UNION SELECT ""Overview"" as Name1,""TL"" as ItemName1) as distTab
where (Templates.Name = distTab.Name1) and ShotNumber = :prm0;
такой запрос дает сообщение:
В качестве входных данных запрос должен иметь хотя бы одну таблицу или запрос.
У добавления командами в реальную таблицу записей выявился тоже неприятный недостаток. При добавлении нескольких десятков записей процесс длится...достаточно чтобы успеть подумать что нибудь нехорошее про скорость работы программы. А добавлять одной командой сразу все записи Акссес отказывается ( т.е. вот такой номерINSERT INTO Production.UnitMeasure
VALUES (N"FT2", N"Square Feet ", "20080923"), (N"Y", N"Yards", "20080923"), (N"Y3", N"Cubic Yards", "20080923");
не прокатывает, ругается на всякие синтаксические ошибки.
← →
кгшзх © (2016-01-29 16:26) [12]азят только поля. таблицы не азят.
.... SELECT ""Overview"" as Name1,""TL"" as ItemName1) as distTab
а вообще тебе сюда наверное
http://www.melange-m.ru/articles/4
← →
gedevan (2016-01-29 16:30) [13]несколько десятков это 415 :-D
← →
gedevan (2016-01-29 16:33) [14]
> а вообще тебе сюда наверное
как и тебе
← →
кгшзх © (2016-01-29 16:48) [15]Можно ли сделать запрос SQL из данных фиктивной таблицы?
Можно.
← →
sniknik © (2016-01-29 17:15) [16]> При добавлении нескольких десятков записей процесс длится...достаточно чтобы успеть подумать что нибудь нехорошее про скорость работы программы.
подумай лучше про реализацию (твои кривые руки)... access локально, и на небольших объемах (до 1.5гига база) быстрее чем mssql. не все конечно, но ... (чисто серверные обработки). а вот использование готовых индексов на клиенте прямо из базы, наоборот, ни один из sql серверов не умеет.
← →
gedevan (2016-01-29 19:21) [17]У меня есть база в которой хранятся шаблоны разных типов. И перед просмотром я хочу выбирать определенные типы (это вот те которых 415) и хочу чтобы мне в выборку попадали только шаблоны заданных типов. Т.е. я не могу 1 раз и навсегда настроить фильтр и сохранить его в базе. Это делается перед формированием отчета. В дереве с галочками я выбираю нужные шаблоны. И вот если поставить все возможные галки то ждать будешь 5-10 секунд пока на каждую галку добавится строка в таблицу. Я реализовал как написано в [1] только все отдельными командами. Таблицу создаю заранее. А после изменения состояния галок делаю только команды Insert в цикле, т.к. одной строкой как это написано в [1] аксес не делает.
А сам запрос (из стартового поста) работает после этого быстро, к нему нет претензий.
Как заполнить таблицу быстрее и причем тут индексы я понятия не имею ( Очевидно, если бы я ничего не читал, то я и того что написал не сделал бы. Можно было бы хотя бы намекнуть что именно гуглить.
← →
sniknik © (2016-01-30 00:40) [18]> Я реализовал как написано в [1] только все отдельными командами.
в [1] ничего о реализации не написано.
> Можно было бы хотя бы намекнуть что именно гуглить.
нет волшебных слов/команд, нечего гуглить... все в деталях. как именно ты делаешь и зачем... например можно на 100% сократить время какого то действия, если понять что оно нужно и избавится от него. или начать решать задачу а метод решения этой задачи...
> И перед просмотром я хочу выбирать определенные типы
и в чем же проблема? зачем тебе для этого таблица или запрос из "не таблицы"?
вот это вот для этого?INSERT INTO Production.UnitMeasure
VALUES (N"FT2", N"Square Feet ", "20080923"), (N"Y", N"Yards", "20080923"), (N"Y3", N"Cubic Yards", "20080923");
чтобы после по ней выбрать?
возьми уникальное значение отсюда (если его нет то сделай, добавь фиктивное/искусственный ключ) и выбирай по нему, о списку из значений который будешь набирать галочками... так, например
SELECT ... FROM SomeTable WHERE SomeField IN ("FT2", "Y", "Y3")
все, если в списке идентификаторы(типы) шаблонов, и в поле тоже значение идентификатор шаблона получишь -
> чтобы мне в выборку попадали только шаблоны заданных типов.
задача решена.
← →
sniknik © (2016-01-30 00:42) [19]> или начать решать задачу а метод решения этой задачи...
или начать решать задачу а НЕ метод решения этой задачи...
← →
gedevan (2016-02-04 19:16) [20]Попробовал так, но видимо что то я опять неправильно попробовал.
Function GetPhotoQueryText(AConnection: TADOConnection; var parQty: integer;
cond: string): string;
begin
result := "";
parQty := 0;
if TableExists(AConnection, "Templates") then
begin
result := result +
" Select " + """Tem"" as objType," + "ShotNumber," + "Name," + "ItemName," +
"NumberOfSearch," + "tempfound," + "itIsTemplate, " + "anotherTime, " +
"SearchFixed, " + "x1," + "x2," + "y1," + "y2," + "ksov," + "searchtime,"
+ "FourSearch," + "NULL as RecognizedText," + "errorCode, Name+ItemName AS FiltrField " +
"FROM Templates "+
" where ShotNumber = :prm0 ";
inc(parQty);
end;
if TableExists(AConnection, "ColorSearch") then
begin
if result <> "" then
result := result + " UNION ";
result := result + "Select ""Col"" as objType,ShotNumber, " +
"Name,""no items"" as ItemName,0,tempfound,""false"",""false"",""false"",x1,x2,y1,y2,0,searchtime,"
+ """false"",NULL as RecognizedText,errorCode, Name+""no items"" AS FiltrField " +
" FROM ColorSearch " +
"where ShotNumber = :prm2";
inc(parQty);
end;
if TableExists(AConnection, "DynObj") then
begin
if result <> "" then
result := result + " UNION ";
result := result + "Select " + """Dyn"" as objType," + "ShotNumber, " + "Name," +
"""no items"" as ItemName," + "NumberOfSegment," + "tempfound," +
"""false""," + """false""," + """false""," + "x1," + "x2," + "y1," + "y2,"
+ "0," + "searchtime," + """false""," + "NULL as RecognizedText," +
"errorCode , Name+""no items"" AS FiltrField " +
" FROM DynObj where ShotNumber = :prm1";
inc(parQty);
end;
if TableExists(AConnection, "TextRecognize") then
begin
if result <> "" then
result := result + " UNION ";
result := result + "Select ""Tex"" as objType,ShotNumber, " +
"Name,""no items"" as ItemName,NumberOfSegment,tempfound,""false"",""false"",""false"",x1,x2,y1,y2,0,s earchtime,"
+ """false"",RecognizedText,errorCode, Name+""no items"" AS FiltrField " +
" FROM TextRecognize " +
" where ShotNumber = :prm3";
inc(parQty);
end;
if result <> "" then
begin
result := "select objType,ShotNumber,Name,ItemName,NumberOfSearch,tempfound,"
+ "itIsTemplate, anotherTime, SearchFixed,x1,x2,y1,y2,ksov,searchtime,"
+ "FourSearch,RecognizedText,errorCode,FiltrField,Name+ItemName AS FiltrField2 from (" + result + ")";
if cond <> "" then
result := result +
" where FiltrField IN " + cond;
end;
if result <> "" then
result := result + ";";
end;
Проблема в том, что в DBGrid в полях FiltrField и FiltrField2 я вижу только no items, т.е. те которые были добавлены в виде строки, а вот следов Name или ItemName я там не вижу ( т.е. поле просто пустое. Почему?
← →
кгшзх © (2016-02-04 19:37) [21]null + somethingevennotnull = null
← →
gedevan (2016-02-04 23:37) [22]но тогда почему я вижу no items? ведь если Name есть null значит Name + "no items" тоже должно быть null.
Да и почему оно null то? ведь поле Name в dbGrid у меня нормально отображается. и есть поля где и Name и ItemName вроде как не null, но в них поле FiltrField также пустое.
← →
кгшзх © (2016-02-05 08:47) [23]ну так проверь не в гриде.
чудес не бывает.
если в поле есть значение и поле в есть в селекте, в выборку оно попадает.
если его сложить с ненулом, то значение будет не нулом.
← →
gedevan (2016-02-05 12:03) [24]Посмотрел, оказывается дело в том что скюль выдает Name удлиняя его пробелами до максимально возможной длины поля таблицы, и в результате в складируемое поле оно так и попадает с пробелами, а дбГрид видимо так все это показывает что видно только пробелы ) , добавил rtrim и заработало
← →
кгшзх © (2016-02-05 12:10) [25]CREATE TABLE distTab (Name1 char(50), ItemName1 char(50));
варчар-то куда делся?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2018.01.14;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.002 c