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

Вниз

Как сделать запрос к результату запроса.   Найти похожие ветки 

 
ViktorZ ©   (2006-02-17 22:14) [0]

Как применить к результату запроса еще одно условие.
Есть запрос вида:

SELECT A.*, AD.* FROM Acheck A, Adcheck AD, WHERE A.LogicDate BETWEEN :P1 AND :P2  AND A.Sys_Num = AD.Sys_Num AND AD.Sifr = :P3

из него я получаю диапазон Sys_num, по которому мне нужно выбрать sifr из третье таблицы ARCHECK.

Пишу:

SELECT AR.* FROM ARcheck AR
WHERE AR.SYS_NUM=(Select A.* , AD.* FROM acheck A, ADCheck AD WHERE A.LogicDate BETWEEN "01.01.2006" AND "24.01.2006" AND A.Sys_Num=AD.Sys_Num AND AD.Sifr = 15)

ОН не работает. Пишет Ошибку: single row subquery produced more than one row.
Хотя так вроде привычно все на вид(наверное тока мне).

Как то объединять у меня не получалось. Книжки читал, но как то не вдомек.Запутался в общем.

Вообще можно было присвоить A.Sys_Num=AD.Sys_Num какой нить виртуальной таблице а потом ее приравнять к ARCheck тогда б наверное то получилось.
Заранее спасибо.


 
unknown ©   (2006-02-17 22:21) [1]

Было бы понятнее, если бы предоставили исх. данные и требуемый рез-т.
На вскидку:
SELECT AR.* FROM ARcheck AR
left outer join ADCheck AD on AD.Sys_Num=AR.Sys_Num
left outer join acheck A on A.Sys_Num=AD.Sys_Num
WHERE A.LogicDate BETWEEN "01.01.2006" AND "24.01.2006" AND A.Sys_Num=AD.Sys_Num AND AD.Sifr = 15


 
Desdechado ©   (2006-02-17 22:29) [2]

> WHERE AR.SYS_NUM=(Select A.* , AD.*
И как это ты сравниваешь ОДНО поле с НАБОРОМ полей, который возвращает вложенный SELECT? И это "привычно все на вид"?!
И если вложенный SELECT может вернуть БОЛЬШЕ ОДНОЙ строки, то никаких сравнений, только проверка вхождения во множество WHERE AR.SYS_NUM IN( Select ...


 
ViktorZ ©   (2006-02-17 22:48) [3]

Спасибо.
И как это ты сравниваешь ОДНО поле с НАБОРОМ полей, который возвращает вложенный SELECT? И это "привычно все на вид"?!

Да я думал он их поочереди будет сравнивать а нужные выведет.


 
ViktorZ ©   (2006-02-18 08:58) [4]


> только проверка вхождения во множество WHERE AR.SYS_NUM
> IN( Select

Ага. И так хоть для скольки таблиц, то есть можно хоть 10 приравнять по полю.


 
Desdechado ©   (2006-02-18 15:14) [5]

> я думал он их поочереди будет сравнивать а нужные выведет
по очереди что? 20 полей из A и 15 из AD (ведь A.* - означает "все поля А")?
как ты себе представляешь при этом "нужные выведет"?

> IN( Select
> так хоть для скольки таблиц, то есть можно хоть 10 приравнять по полю
Еще раз - не приравнивание, а проверка вхождения во множество, полученное любой выборкой, но только тех полей, которые нужно проверять, а не всех подряд)


 
unknown ©   (2006-02-18 16:48) [6]

Честно говоря, не вижу в приведенном примере смысла во вложенном запросе.
Можно сделать и с join-ами, что логичнее.
Хотя, автор так и не представил примеры данных и желаемый результат.


 
ViktorZ ©   (2006-02-18 19:33) [7]


> Хотя, автор так и не представил примеры данных и желаемый
> результат.
>

Это не просто сделать, а Desdechado Знает о чем я. Я раньшне просто спрашивал.


 
ViktorZ ©   (2006-02-19 20:48) [8]

А как избавиться от ошибки"error creating cursor handle":
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text :="DELETE FROM Categ15";
Query1.SQL.Text:="INSERT INTO Categ15 SELECT M.Sifr,M.Categ,M.Price FROM Menu M "+
" LEFT OUTER JOIN ARCheck AR on AR.Sifr=M.Sifr"+
" LEFT OUTER JOIN  ADCheck AD on AD.Sys_Num=AR.Sys_Num"+
" LEFT OUTER JOIN acheck A on A.Sys_Num=AD.Sys_Num  WHERE"+
" M.Categ=15 AND A.LogicDate BETWEEN :P1 AND :P2 AND A.Sys_Num=AD.Sys_Num AND AD.Sifr =:P3 GROUP BY M.Sifr,M.Categ,M.Price";
Query1.Params[0].AsDate := strtoDate(Trim( Edit1.text));
Query1.Params[1].AsDate := strtoDate(Trim( Edit2.text));
Query1.Params[2].Asinteger := strtoint(Trim( Edit3.text));
Query1.Open;

Сам понимаю что так теоретичеси нельзя. Но на практике канает. Но видимо там указатель в конце или что такое вот он и ругается. Как решить.


 
Desdechado ©   (2006-02-19 21:25) [9]

> "error creating cursor handle":
означает, что ты пытаешься получить набор данных от запроса, который не может его вернуть
Open для SELECT
ExecSQL для DELETE, UPDATE, INSERT и прочего

> Query1.SQL.Text :="DELETE FROM Categ15";
> Query1.SQL.Text:="INSERT INTO Categ15 SELECT M.Sifr,M.Categ,M.Price FROM
смысл этой записи?


 
ViktorZ ©   (2006-02-20 16:49) [10]

Нормальный смысл, главное работает. Этот запрос записывает в таблицу данные которые получил из SELECT. Просто мне нужно выполнить уловие IF. Типа если M.Categ=15 то просуммировать все поле Price. Если M.Categ<>15 то тоже суумирует, а потом от большего отнимает меньшее. Вот я так и делаю: 2кнопки. В одной считать пытаюсь, а потом в др. По другому пока не знаю как, вот и ищу др.методы.SUM(M.Price) AS TOTAL не помогает. Какую то лабуду выдает. А Делфи я немогу сделать так чтобы DBGrid отоброжал поле ТОТАЛ какже как и в SQL Explorer.


 
Рустем ©   (2006-02-20 17:17) [11]


>  как избавиться от ошибки"error creating cursor handle":

Еще раз внимательно прочитай [9], первую часть.


 
ViktorZ ©   (2006-02-20 20:17) [12]

Да я уже все сделал почти. Всем спасибо. Особенно Desdechado(как кстати у тя правильно ник читаеться?) и unknown.



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

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

Наверх




Память: 0.48 MB
Время: 0.055 c
15-1142533379
lookin
2006-03-16 21:22
2006.04.16
И еще про спорт... Сенсационные результаты плей-офф по хоккею...


6-1136373049
ingine
2006-01-04 14:10
2006.04.16
TIdFtp


2-1143814789
Der Nechk@ssoff
2006-03-31 18:19
2006.04.16
Clean Image


2-1143965258
0lesya
2006-04-02 12:07
2006.04.16
Как с программой написанной под 5-м Delphi работать под 7-м!


15-1143311396
Топоним
2006-03-25 21:29
2006.04.16
Об употреблении некоторых топонимов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский