Witam. Mam taki problem, że w zapytaniu mam połączone kilka tabel przez warunki w WHERE (nazwijmy to zapytaniem A). Potrzebuję dodać do tego tabelę, gdzie są zapisywane zmiany statusu. Próbowałem zrobić to zarówno przez WHERE jak i przepisać zapytanie na JOIN’y i zawsze wynik jest taki sam. Dostaję część wspólną złączonych tabel, nawet przy wykonaniu LEFT OUTER JOIN, który w myśl schematu poniżej powinien dać dobry wynik.
Jak mógłbym osiągnąć to co na obrazku wyżej, zakładając, że lewa strona to zapytanie A, a prawa to tabela, którą chcę dołączyć?
Przepisałem zapytanie na nowo pozbywając się zbędnych tabel i złączeń i jest o wiele lepiej - przynajmniej zaczęło działać. Teraz mam trochę inne pytanie. Co trzeba by było zrobić, by pokazywało mi tylko rekordy z najnowszą datą (qs.date_performed)?
SELECT w.wh_nr "magazyn",
lu.loadunit_nr "nr nośnika",
p.PRODUCT_NR "nr artykułu",
sn.serial_nr "partia",
p.name "nazwa",
lu.status_quality "status jakości",
qs.reason "powód",
qs.info "opis",
qs.date_performed "data"
FROM load_units_fast lu,
hist_qs_change qs,
qcm_products p,
lu_contents_fast luc,
warehouses w,
storageareas sa,
storageplaces sp,
qcm_prod_serials sn
WHERE lu.loadunit_id = qs.object_id(+)
AND luc.loadunit_id = lu.loadunit_id
AND luc.product_id = p.PRODUCT_ID
AND lu.sp_id = sp.sp_id
AND sp.sa_id = sa.sa_id
AND sa.wh_id = w.WH_ID
AND luc.prod_serial_id = sn.prod_serial_id
AND p.PRODUCT_ID = sn.product_id
AND lu.status_quality = '19'
AND (qs.status_after <> '0' AND qs.status_after <> '1' OR
qs.status_after IS NULL)
AND (lu.status_quality <> '0' AND lu.status_quality <> '1' OR
lu.status_quality IS NULL)
GROUP BY w.wh_nr,
lu.loadunit_nr,
p.PRODUCT_NR,
p.name,
qs.reason,
qs.info,
sn.serial_nr,
qs.status_after,
lu.status_quality,
qs.date_performed
ORDER BY 2, 9