В настоящее время у меня есть два разных запроса для модуля в приложении, которое я только начал поддерживать (первое задание на программирование). Первый запрос выбирает все автомобили, в которых находится Двигатель (9,10,11,12,13). Второй получает все автомобили, в которых находится Двигатель (4,44). Они оба работают нормально, единственная проблема заключается в том, что когда они помещаются в одну и ту же таблицу на JSP, они не используют один и тот же фильтр. Поэтому в основном все данные для первого запроса всегда будут первыми, а данные для второго запроса всегда будут вторыми. При сортировке по алфавиту, он будет сортировать все данные из первого запроса, AZ, то данные из второго запроса, AZ, так что вы бы увидеть что-то вроде:Как сделать JOIN внутри CASE? Или использовать СОЮЗ? (SQL)
A Car with Engine 11
B Car with Engine 9
C Car with Engine 13
D Car with Engine 12
A Car with Engine 44
B Car with Engine 44
C Car with Engine 4
Так что я подумал, что это, вероятно, будет лучше всего делать какую-то комбинацию CASE и JOIN и просто иметь один запрос. К сожалению, мне трудно понять, как это сделать. Данные извлекаются из представлений в базе данных Oracle. Ниже приведены два запроса:
SELECT DISTINCT
P.CAR_ID CAR_ID,
P.TYPE TYPE,
P.LAST_TIME_SERVICED LAST_TIME_SERVICED,
P.SERVICE_TYPE SERVICE_TYPE,
P.PURCHASE_DATE PURCHASE_DATE,
'20'|| SUBSTR (P.MODEL_YEAR, 1, 2)|| ' - '|| '20'|| SUBSTR (P.MODEL_YEAR, 3, 4) MODEL_YEAR,
P.DESCRIPTION DESCRIPTION,
P.ENGINE_TYPE ENGINE_TYPE,
V.MODEL_ID MODEL_ID,
V.POPULAR_NAME POPULAR_NAME,
V.GMC GMC,
V.DISPUTE DISPUTE,
V.ENGINE ENGINE,
'20'|| SUBSTR (V.YEAR, 1, 2)|| ' - '|| '20'|| SUBSTR (V.YEAR, 3, 4) YEAR,
DECODE (V.SUBS, '~', NULL, V.SUBS) SUBS,
V.CONSEC CONSEC,
RFI.CUST_CUST_ID CUST_CUST_ID,
RFI.SALESMAN SALESMAN
FROM DEALER.VW_INV_FOR_SALE RFI, DEALER.VW_OLD_SALES P,
DEALER.VW_NEW_SALES V
WHERE P.ENGINE_TYPE IN (9,10,11,12,13)
AND V.MODEL_ID = RFI.MODEL_ID
AND RFI.MODEL_ID = P.MODEL_ID
AND V.YEAR >='1011'
AND V.YEAR = P.MODEL_YEAR
AND V.ENGINE = P.ENGINE_TYPE
AND V.SUBS = P.SUBSCRIPT
AND P.DESCRIPTION != '100% SAFE'
AND RFI.CUST_CUST_ID IN (SELECT CUST_ID FROM CUSTOMERS WHERE CUST_ID = ?
UNION
SELECT CUST_ID FROM CUSTOMERS
START WITH CUST_CUST_ID = ?
CONNECT BY PRIOR CUST_ID = CUST_CUST_ID)
SELECT DISTINCT
P.CAR_ID CAR_ID,
P.TYPE TYPE,
P.LAST_TIME_SERVICED LAST_TIME_SERVICED,
P.SERVICE_TYPE SERVICE_TYPE,
P.PURCHASE_DATE PURCHASE_DATE,
'20'|| SUBSTR (P.MODEL_YEAR, 1, 2)|| ' - '|| '20'|| SUBSTR (P.MODEL_YEAR, 3, 4) MODEL_YEAR,
RFI.CUST_CUST_ID CUST_CUST_ID,
RFI.SALESMAN SALESMAN,
P.DESCRIPTION DESCRIPTION,
P.ENGINE_TYPE ENGINE_TYPE,
Q.MODEL_ID MODEL_ID,
Q.POPULAR_NAME POPULAR_NAME,
Q.GMC GMC,
Q.DISPUTE DISPUTE,
Q.ENGINE ENGINE,
'20'|| SUBSTR (Q.YEAR, 1, 2)|| ' - '|| '20'|| SUBSTR (Q.YEAR, 3, 4) YEAR,
DECODE (Q.SUBS, '~', NULL, Q.SUBS) SUBS,
Q.CONSEC CONSEC,
Q.RESULT RESULT
FROM DEALER.VW_INV_FOR_SALE RFI, DEALER.VW_OLD_SALES P,
DEALER.VW_ENGINE4_RESULT Q
WHERE P.ENGINE_TYPE IN (4,44)
AND Q.MODEL_ID = RFI.MODEL_ID
AND RFI.MODEL_ID = P.MODEL_ID
AND Q.YEAR >='1011'
AND Q.YEAR = P.MODEL_YEAR
AND Q.ENGINE = P.ENGINE_TYPE
AND Q.SUBS = P.SUBSCRIPT
AND P.DESCRIPTION != '100% SAFE'
AND RFI.CUST_CUST_ID IN (SELECT CUST_ID FROM CUSTOMERS WHERE CUST_ID = ?
UNION
SELECT CUST_ID FROM CUSTOMERS
START WITH CUST_CUST_ID = ?
CONNECT BY PRIOR CUST_ID = CUST_CUST_ID)
Любая помощь с этим очень ценится.
Это действительно трудно следовать ур длительных запросов с проблемой, упомянутой. Можете ли вы упростить ур вопрос с образцом запроса для решения только проблемы ур сталкивается. то есть что-то вроде i hv 2 таблицы A и B. Мне нужны данные из A, которые не находятся в B. –
Помимо типов двигателей, как эти запросы отличаются? –