Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];

Вниз

Помогите с запросом, пожалуйста   Найти похожие ветки 

 
Relaxoid   (2003-09-04 16:54) [0]

Есть такой запрос:
SELECT SB.NUM AS NUM, ...
FROM
SICR_BATCH AS SB, ...
REF_KIND_IS AS RKI RIGHT JOIN REF_KIND_EL AS RKE ON RKI.ELEMENT_ID=RKE.ID
WHERE
(SB.CHANGE_TYPE=RC.ID) And
(SB.PROGRAM=RP.ID) And ...

(Запрос большой, оставил только нужные части). Но Access не понимает RIGHT JOIN. Можно как то это сделать иначе? Запрос идет через ADOQuery. Заранее спасибо.


 
Mike Kouzmine   (2003-09-04 17:00) [1]

Почему не понимает?


 
A_N_D   (2003-09-04 17:01) [2]

просто join


 
Mike Kouzmine   (2003-09-04 17:01) [3]

UPDATE SCHET LEFT JOIN AGENTS ON SCHET.AGENTCODE = AGENTS.AGENTCODE SET SCHET.OCENA = [SCHET]![OCENA]*0.69
WHERE (((SCHET.SCLAD)="000002") AND ((SCHET.VID)=2) AND ((SCHET.TYPE)=5) AND ((SCHET.AGENTCODE)=138) AND ((SCHET.NUMDOC) Is Null));
Нормально катит


 
Relaxoid   (2003-09-04 17:01) [4]

Не знаю, пишет "Не поддерживается выражение объеденения".


 
Relaxoid   (2003-09-04 17:02) [5]

Просто join мне не катит, в таближе RKI может не быть ссылки на RKE, а может и быть.


 
A_N_D   (2003-09-04 17:04) [6]

left join


 
Relaxoid   (2003-09-04 17:07) [7]

left join аналогично с right join


 
Relaxoid   (2003-09-04 17:09) [8]

2 Mike Kouzmine:
Чего то я непонял, как это применить к моему запросу?


 
Mike Kouzmine   (2003-09-04 17:10) [9]

Все-таки может имеет смысл весь запрос показать?


 
A_N_D   (2003-09-04 17:10) [10]

Значит не в этом join"е ошибка


 
Hawk2   (2003-09-04 17:12) [11]

left join работает, правда я пробовал только в Access97. Если можно в запросе поменять местами RKI.ELEMENT_ID=RKE.ID (RKE.ID=RKI.ELEMENT_ID) и использовать left join.


 
Relaxoid   (2003-09-04 17:12) [12]

2 Mike Kouzmine:
легко, но он очень большой

SELECT SB.NUM AS NUM, RC.CODE AS CHANGE_TYPE, RP.CODE AS PROGRAM, RK.CODE AS
KIND, SB.ENRICHMENT AS ENRICHMENT, BN.BATCHNAME AS BATCHNAME, RPHF.CODE AS
PHYS, RCF.CODE AS CHEM, RPF.CODE AS PURE, SB.LIG_MASS_UNIT AS LIG_MASS_UNIT,
SB.LIG_MASS AS LIG_MASS, RE.CODE, BE.UNIT, BE.MASS, RI.CODE, BI.UNIT, BI.MASS
FROM SICR_BATCH AS SB, BATCH_EL AS BE, Ref_Change AS RC, REF_PROGRAM AS RP,
REF_KIND AS RK, BATCHNAME AS BN, MAT_DEF_CODE AS MDC, REF_PHYSFORM AS RPHF,
REF_CHEMFORM AS RCF, REF_PURFORM AS RPF, REF_ELEMENT AS RE, REF_ISOTOPE AS RI,
BATCH_IS AS BI,
REF_KIND_IS AS RKI Right JOIN REF_KIND_EL AS RKE ON
RKI.ELEMENT_ID=RKE.ID
WHERE
(SB.CHANGE_TYPE=RC.ID) And
(SB.PROGRAM=RP.ID) And
(SB.KIND=RK.ID) And
(SB.BATCHNAME_ID=BN.ID) And
(SB.MDC_ID=MDC.ID) And
(MDC.PHYS=RPHF.ID) And
(MDC.CHEM=RCF.ID) And
(MDC.PURE=RPF.ID) And
(RKE.KIND_ID=RK.ID) And
(RKE.CODE_ID=RE.ID) And

(RKI.CODE_ID=RI.ID) And
(BE.ID=BI.EL_ID) And
(BE.BATCH_ID=SB.ID) And
(BE.EL_ID=RKE.ID) And
(BI.IS_ID=RKI.ID) And
BE.REPORT_TYPE=2 And SB.REP_ID=:repid
ORDER BY SB.NUM, RK.CODE, RE.CODE;


 
Relaxoid   (2003-09-04 17:14) [13]

2 Hawk2: поменял, тоже самое


 
Mike Kouzmine   (2003-09-04 17:24) [14]

А если убрать AS RKE? Вроде выше она нигде не упоминается? (хотя от ряби в глазах мог и не заметить)


 
Relaxoid   (2003-09-04 17:27) [15]

Сделал так
REF_KIND_IS AS RKI Right JOIN REF_KIND_EL ON
RKI.ELEMENT_ID=REF_KIND_EL.ID
,
но эта таблица упоминается в where, причем не раз, ничего не изменилось.


 
Hawk2   (2003-09-04 17:32) [16]

Так нажмем на кнопку справка:

Не поддерживается выражение объединения. (Ошибка 3296)
Возможные причины:
· Результаты выполнения инструкции SQL, содержащей множественные объединения, зависят от порядка выполнения объединений. Для того чтобы указать, какое из объединений необходимо выполнить первым, следует создать отдельный запрос, в котором выполняется первое объединение, а затем включить этот запрос в инструкцию SQL.
· Инструкция ON в операции JOIN является неполной или содержит слишком много таблиц. Попробуйте включить инструкцию ON в предложение WHERE.

Вобщем есть запрос:
SELECT Products.ProdName, Products.ProdZena, Sum(Oborot.Kilkist), Sum((Products.ProdZena*Oborot.Kilkist)) AS Summa, Firms.FirmName
FROM (Products INNER JOIN Oborot ON Products.ID=Oborot.ProdID) INNER JOIN Firms ON Products.FirmID=Firms.ID
GROUP BY Products.ProdName, Products.ProdZena, Firms.FirmName;
пробую заменить:
SELECT Products.ProdName, Products.ProdZena, Sum(Oborot.Kilkist), Sum((Products.ProdZena*Oborot.Kilkist)) AS Summa, Firms.FirmName
FROM (Products INNER JOIN Oborot ON Products.ID=Oborot.ProdID) RIGHT JOIN Firms ON Products.FirmID=Firms.ID
GROUP BY Products.ProdName, Products.ProdZena, Firms.FirmName;
пишет "Не поддерживается выражение объединения".
Меняю так:
SELECT Products.ProdName, Products.ProdZena, Sum(Oborot.Kilkist), Sum((Products.ProdZena*Oborot.Kilkist)) AS Summa, Firms.FirmName
FROM (Products LEFT JOIN Oborot ON Products.ID=Oborot.ProdID) RIGHT JOIN Firms ON Products.FirmID=Firms.ID
GROUP BY Products.ProdName, Products.ProdZena, Firms.FirmName;
Работает!!! Результат конечно бред, но это просто проверка. Вывод, нужно менять логику SQL-запроса.


 
Relaxoid   (2003-09-04 17:36) [17]

2 Hawk2: этого я и боюсь, думаю, может можно просто связать эти 2 таблицы как то по другому. А то у меня в запросе 15 таблиц... Если все так описывать...
P.S. Кнопку справка я нажимал, она у меня не работает.


 
Hawk2   (2003-09-04 17:49) [18]

Скажу еще такое, не по теме, но близко. Поубирай из запроса всю эту фигню типа AS Другое_Имя, запрос на 30% станет короче и понятнее. Я считаю эту конструкцию нужно применять для пояснения полей, а менять одно непонятное название на другое еще более непонятное типа REF_PHYSFORM AS RPHF нет смысла.


 
Relaxoid   (2003-09-04 17:59) [19]

2 Hawk2: с названиями таблиц я могу такое сделать, а вот с названиями полей, сложнее, дело в том, что я пишу не новый запрос, а изменяю существующий (из-за изменений в БД), названия полей во многих местах присутствуют в запросе, мне проще написать псевдонимы для полей, чем копатся в коде и выискивать где их надо поменять. А так я согласен.



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

Форум: "Базы";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.011 c
1-82268
Zhouck
2003-09-15 11:42
2003.09.25
Как связаться с OpenOffice ?


4-82569
Still Swamp
2003-07-24 17:46
2003.09.25
WM_MOUSEWEEL - проблемы


14-82435
Дон Хуан
2003-08-21 18:35
2003.09.25
---|Ветка была без названия|---


1-82306
Regul
2003-09-11 21:04
2003.09.25
Microsoft Equation


14-82469
Всеволод Соловьёв
2003-09-06 12:22
2003.09.25
Воздушно-пузырьковые стиралки





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский